Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将数据帧转换为嵌套字典_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何将数据帧转换为嵌套字典

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

我正在运行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
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'}}}