带多列的groupby,其中熊猫具有加法和频率计数

时间:2018-12-06 06:41:59

标签: python pandas group-by sum multiple-columns

我有一个如下表:

name  type    val 
A     online  12
B     online  24
A     offline 45
B     online  32
A     offline 43
B     offline 44

我想以一种dataframe的方式使用它,使其可以groupby带有多个列nametype,其中也有返回{{1 }}中的记录,其中count被添加为相同类型的记录。它应该如下所示:

val

我已经尝试过name type count val A online 1 12 offline 2 88 B online 2 56 offline 1 44 进行添加,但是无法添加记录数。

2 个答案:

答案 0 :(得分:2)

将参数sort=False添加到groupby,以避免进行默认排序,并通过agg进行聚合,其中元组具有新的列名和聚合函数,最后reset_index代表MultiIndex到列:

df1 = (df.groupby(['name', 'type'], sort=False)['val']
        .agg([('count', 'count'),('val', 'sum')])
        .reset_index())
print (df1)
  name     type  count  val
0    A   online      1   12
1    B   online      2   56
2    A  offline      2   88
3    B  offline      1   44

答案 1 :(得分:0)

您可以尝试旋转

df.pivot_table(index=['name','type'],aggfunc=['count','sum'],values='val')

             count sum
               val val
name type             
A    offline     2  88
     online      1  12
B    offline     1  44
     online      2  56