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

时间:2019-06-04 07:18:13

标签: python pandas

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

imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor, multiplier: 21/9).isActive = true

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

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)

1 个答案:

答案 0 :(得分:4)

您可以使用dict comprehension,例如:

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

[出]

{'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