从 groupby 对象创建字典,Python

Posted

技术标签:

【中文标题】从 groupby 对象创建字典,Python【英文标题】:Create a dictionary from groupby object,Python 【发布时间】:2014-06-21 15:15:03 【问题描述】:

假设我有一个数据框:

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'] 的列表值,注意高频名称应该出现在值中first列表

预期输出:

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

【问题讨论】:

【参考方案1】:

您可以使用以下字典推导式创建字典

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'),然后将值设置为字典的内部索引。

必须先按Frequency 列对您的MultiIndex 进行排序以获得您想要的排序。

【讨论】:

DataFrame.sort() 已被弃用,现在已被删除。立即使用f.sort_values()【参考方案2】:

这是一个单线。

df.groupby(['Type'])['Name'].apply(lambda grp: list(grp.value_counts().index)).to_dict()

# output
#'Bird': ['Pigeon', 'Flappy Bird'], 'Pokemon': ['Jerry', 'Mudkip']

value_counts 函数默认按计数对Name 字段进行分组,并默认返回降序。

奖励:如果您想包含计数,可以执行以下操作。

df.groupby(['Type']).apply(lambda grp: grp.groupby('Name')['Type'].count().to_dict()).to_dict()

# 'Bird': 'Flappy Bird': 1, 'Pigeon': 2, 'Pokemon': 'Jerry': 3, 'Mudkip': 2

【讨论】:

嗨@DanDy:你的奖金部分帮助了我。你能详细说明一下吗,我想知道它是如何工作的。谢谢..

以上是关于从 groupby 对象创建字典,Python的主要内容,如果未能解决你的问题,请参考以下文章

从 Python groupby 填充日期

将 GroupBy 对象 (groupby().size) 转换为字典

100天精通Python(数据分析篇)——第64天:Pandas分组groupby函数案例

六:python 对象类型详解四:字典

Python从字符串创建JSON对象

如何对不同长度的 Python Pandas groupby 对象进行切片?