首页 > 解决方案 > 具有多列的groupby,在熊猫中具有添加和频率计数

问题描述

我有一个如下所示的表:

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

我希望dataframe它可以groupby与多个 cols name&一起使用type,它们还有额外的列,这些列返回count记录的,val并添加了相同类型的记录。它应该如下所示:

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

我已经尝试过pd.groupby(['name', 'type'])['val'].sum()添加但无法添加记录数。

标签: pythonpandasgroup-bysummultiple-columns

解决方案


添加参数sort=Falsetogroupby以避免默认排序和聚合,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

推荐阅读