如何在python中进行分组聚合

时间:2017-10-25 12:03:48

标签: python pandas dataframe

假设我有以下

bin=[0,5,10]

sex age num
1    4   11     
1    3   12
2    2   13
2    10  14

我想在num和count年龄中求和。 首先我试过

df.groupby([df.sex,pd.cut(df.age,bin)]).size()

df.groupby([df.sex,pd.cut(df.age,bin)]).sum()

但我无法弄清楚如何聚合和转换它们。 我想要以下结果。像

sex        age   num
 1 [0,5)    2     23   
 1 [5,10)   0      0
 2 [0,5)    1     13
 2 [5,10)   1     14

如果我能以简单的方式得到这个结果,请有人告诉我如何转换原始数据帧。

1 个答案:

答案 0 :(得分:1)

使用agg,然后按unstack + stack添加缺失值:

df = df.groupby([df.sex,pd.cut(df.age,bin)])
       .agg({'num':'sum', 'age':'size'})
       .unstack(fill_value=0)
       .stack()
print (df)
             num  age
sex age              
1   (0, 5]    23    2
    (5, 10]    0    0
2   (0, 5]    13    1
    (5, 10]   14    1

或创建MultiIndexreindex

bin=[0,5,10]
cats = pd.cut(df.age,bin)
mux = pd.MultiIndex.from_product([df.sex.unique(), cats.cat.categories])
df = df.groupby([df.sex,cats]).agg({'num':'sum', 'age':'size'}).reindex(mux, fill_value=0)
print (df)
           num  age
1 (0, 5]    23    2
  (5, 10]    0    0
2 (0, 5]    13    1
  (5, 10]   14    1