Pandas 分组与频率计算

5 投票
1 回答
24126 浏览
提问于 2025-04-18 04:58

我有一个数据表:

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

我需要把这些观察结果按类型分组,也就是说,把所有的宝可梦类型和它们各自的名字放在一起。同时,我还需要加一个新列,里面显示每个名字在对应类型中出现的频率。最终的结果应该像这样:

Type         Name     Frequency   
Pokemon      Jerry        3 
             Mudkip       2    

Bird         Pigeon       2  
           Flappy Bird    1  

我用了:

data2 = df.groupby(['Type']) 

但是这样分组的方式不对。
请帮帮我。

1 个回答

17

我觉得你想要同时按'类型'和'名称'来分组:

print df.groupby(['Type','Name']).size()

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

或者,如果你想让这一列叫做'频率',你可以这样做:

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

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

撰写回答