问题 从groupby对象Python创建一个字典


假设我有一个数据帧:

df = pd.DataFrame({'Type' : ['Pokemon', 'Pokemon', 'Bird', 'Pokemon', 'Bird', 'Pokemon', 'Pokemon', 'Bird'],'Name' : ['Jerry', 'Jerry', 'Flappy Bird', 'Mudkip','Pigeon', 'Mudkip', 'Jerry', 'Pigeon']})  

我根据类型分组:

print df.groupby(['Type','Name'])['Type'].agg({'Frequency':'count'})

                           Frequency
Type    Name                  
Bird    Flappy Bird          1
        Pigeon               2
Pokemon Jerry                3
        Mudkip               2

我能从上面的组创建一个字典吗?该   "Bird" 将包含列表的值 ['Pigeon',Flappy Bird'] 注意 频率更高的名字 应该出现 第一 在里面 价值清单

预期产出:

dict1 = { 'Bird':['Pigeon','Flappy Bird'] , 'Pokemon':['Jerry','Mudkip'] }

9871
2018-05-05 10:39


起源



答案:


您可以使用字典理解创建字典,如下所示

df = pd.DataFrame({'Type' : ['Pokemon', 'Pokemon', 'Bird', 'Pokemon', 'Bird', 'Pokemon', 'Pokemon', 'Bird'],'Name' : ['Jerry', 'Jerry', 'Flappy Bird', 'Mudkip','Pigeon', 'Mudkip', 'Jerry', 'Pigeon']})  
f = df.groupby(['Type','Name'])['Type'].agg({'Frequency':'count'})
f.sort('Frequency',ascending=False, inplace=True)

d = {k:list(f.ix[k].index) for k in f.index.levels[0]}
print(d)
# {'Bird': ['Pigeon', 'Flappy Bird'], 'Pokemon': ['Jerry', 'Mudkip']}

字典理解将遍历外部索引('Bird','Pokemon'),然后将值设置为字典的内部索引。

有必要先对你的 MultiIndex 通过 Frequency 列,以获得您想要的订单。


11
2018-05-05 11:00



DataFrame.sort() 已弃用,现已删除。使用 f.sort_values() 现在。 - dankal444


答案:


您可以使用字典理解创建字典,如下所示

df = pd.DataFrame({'Type' : ['Pokemon', 'Pokemon', 'Bird', 'Pokemon', 'Bird', 'Pokemon', 'Pokemon', 'Bird'],'Name' : ['Jerry', 'Jerry', 'Flappy Bird', 'Mudkip','Pigeon', 'Mudkip', 'Jerry', 'Pigeon']})  
f = df.groupby(['Type','Name'])['Type'].agg({'Frequency':'count'})
f.sort('Frequency',ascending=False, inplace=True)

d = {k:list(f.ix[k].index) for k in f.index.levels[0]}
print(d)
# {'Bird': ['Pigeon', 'Flappy Bird'], 'Pokemon': ['Jerry', 'Mudkip']}

字典理解将遍历外部索引('Bird','Pokemon'),然后将值设置为字典的内部索引。

有必要先对你的 MultiIndex 通过 Frequency 列,以获得您想要的订单。


11
2018-05-05 11:00



DataFrame.sort() 已弃用,现已删除。使用 f.sort_values() 现在。 - dankal444