【问题标题】:Create a dictionary from groupby object,Python从 groupby 对象创建字典,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'] }

【问题讨论】:

    标签: python dictionary pandas group-by


    【解决方案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:你的奖金部分帮助了我。你能详细说明一下吗,我想知道它是如何工作的。谢谢..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多