Python 如何将数据帧转换为嵌套字典
我正在运行Python 3.6和Pandas 0.19.2,并且有一个如下所示的数据帧:Python 如何将数据帧转换为嵌套字典,python,pandas,dataframe,Python,Pandas,Dataframe,我正在运行Python 3.6和Pandas 0.19.2,并且有一个如下所示的数据帧: Name Chain Food Healthy George McDonalds burger False George KFC chicken False John Wendys burger False John McDonalds salad True
Name Chain Food Healthy
George McDonalds burger False
George KFC chicken False
John Wendys burger False
John McDonalds salad True
health_data = {'George': {'McDonalds': {'Food': 'burger', 'Healthy':False},
'KFC': {'Food': 'chicken', 'Healthy':False}},
'John': {'Wendys': {'Food': 'burger', 'Healthy':False},
'McDonalds': {'Food': 'salad', 'Healthy': True}}}
我想将此数据帧转换为dict,如下所示:
Name Chain Food Healthy
George McDonalds burger False
George KFC chicken False
John Wendys burger False
John McDonalds salad True
health_data = {'George': {'McDonalds': {'Food': 'burger', 'Healthy':False},
'KFC': {'Food': 'chicken', 'Healthy':False}},
'John': {'Wendys': {'Food': 'burger', 'Healthy':False},
'McDonalds': {'Food': 'salad', 'Healthy': True}}}
到目前为止,我的想法是:
df.groupby
对名称列进行分组df.to_dict()
将数据帧转换为字典,方法如下:
health\u data=input\u data.set\u index('Chain').T.to\u dict()
groupby的解决方案
:
解决方案使用:
我想你很接近 使用和:
非常感谢!这很有效。一个小问题:答案的
[['Chain','Food','health']]
部分做了什么?它是过滤列,但如果df
中没有其他列,它可以简化为df.groupby('Name')。应用(lambda x:x.set_index('Chain')。to_dict(orient='index')。to_dict()
我一直在尝试这么做,我没想到把.to_dict
放在lambda里面,感谢Jozi:)喜欢使用iterrows和默认dict,尽管它比group by慢了一点。这将允许您将多个循环链接在一起。另一种方法是使用多索引(但不适用于本例)
df = df.groupby('Name')[['Chain','Food','Healthy']]
.apply(lambda x: x.set_index('Chain').to_dict(orient='index'))
.to_dict()
print (df)
{'George': {'KFC': {'Healthy': False, 'Food': 'chicken'},
'McDonalds': {'Healthy': False, 'Food': 'burger'}},
'John': {'McDonalds': {'Healthy': True, 'Food': 'salad'},
'Wendys': {'Healthy': False, 'Food': 'burger'}}}