需要将Dataframe数据转换为嵌套字典包含列表吗



我已经创建了数据帧,请查看下面的代码段。

data = {'id': [101,102],
'name': ['xyz', 'xyz'],
'value1' : [41,42],
'value2' : [42,32]
}

df = pd.DataFrame(data, columns = ['id', 'name','value1','value2'])
print(df)

数据帧输出

id     name   value1  value2
101     xyz     41     42
102     xyy     42     32

这里我只想从这个数据框架创建嵌套字典

预期输出

{'101':{'name':'xyz'
'data' : [{'value1' : 41,'value2':42},
{'value1': 42,'value2':32}]}}

我试图通过以下代码来完成,但它不起作用,所以请你帮我解决这个

#试过的代码段

代码

print({n: grp.loc[n].to_dict('index')for n, grp in df.set_index(['id','name']).group by(level='id')})

输出

{101: {'xyz': {'value1': 41, 'value2': 42}}, 102: {'xyz': {'value1': 42, 'value2': 32}}}

代码

print({k:f.groupby('name')['value1'].apply(list).to_dict() for k, f in df.groupby('id')})

输出

{101: {'xyz': [41]}, 102: {'xyz': [42]}}

所需输出

{'101':{'name':'xyz'
'data' : [{'value1' : 41,'value2':42},
{'value1': 42,'value2':32},
]}}

假设df是:

df:

id name  value1  value2
0  101  xyz      41      42
1  102  xyy      42      32
2  101  xyz      46      46
3  102  xyy      40      39

df.groupby(['id', 'name'])[['value1', 'value2']]  
.apply(lambda x: x.to_dict(orient='records')).reset_index(name='data')
.set_index('id').to_dict(orient='index')

{101: {'name': 'xyz', 'data': [{'value1': 41, 'value2': 42}, {'value1': 46, 'value2': 46}]}, 102: {'name': 'xyy', 'data': [{'value1': 42, 'value2': 32}, {'value1': 40, 'value2': 39}]}}

最新更新