繁体   English   中英

如何将pandas df变成带有子组的字典

[英]How to turn a pandas df into a dictionary with subgroups

我有一个看起来像这样的数据框:

d = {'country': ['America','America','America','America','Canada','Canada','Canada','Canada'],\
     'city': ['New York','New York','San Francisco','San Francisco',u'Montréal',u'Montréal','Toronto','Toronto'],\
     'landmark': ['Statue of Liberty', 'Empire State Building','Golden Gate Bridge',\
                  'Mission District','Biodome', 'Parc Laurier', 'CN Tower', 'Royal Ontario Museum']}
pd.DataFrame(data = d)

我希望它成为这样的字典:

all_options = {
    'America': {
        'New York': ['Statue of Liberty', 'Empire State Building'],
        'San Francisco': ['Golden Gate Bridge', 'Mission District'],
    },
    'Canada': {
        u'Montréal': ['Biodome', 'Parc Laurier'],
        'Toronto': ['CN Tower', 'Royal Ontario Museum'],
    }
}   

您可以通过以下方式来dict comprehension

all_options = {country: grp.groupby('city')['landmark'].apply(list).to_dict()
               for country, grp in df.groupby('country')}

[OUT]

{'America': {'New York': ['Statue of Liberty', 'Empire State Building'],
  'San Francisco': ['Golden Gate Bridge', 'Mission District']},
 'Canada': {'Montréal': ['Biodome', 'Parc Laurier'],
  'Toronto': ['CN Tower', 'Royal Ontario Museum']}}

或者,如果您喜欢更明确的方法,则等效于for循环:

all_options = {}

for country, grp in df.groupby('country'):
    all_options[country] = grp.groupby('city')['landmark'].apply(list).to_dict()

上面有用的链接包括DataFrame.groupbySeries.applySeries.to_dict

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM