具有多列的groupby,在pandas中具有添加和频率计数[重复]

Posted

技术标签:

【中文标题】具有多列的groupby,在pandas中具有添加和频率计数[重复]【英文标题】:groupby with multiple columns with addition and frequency counts in pandas [duplicate] 【发布时间】:2019-05-07 19:47:47 【问题描述】:

我有一个如下所示的表格:

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

我希望dataframe 可以是groupby 和多个列nametype,它们还有额外的列返回记录的countval 是添加了相同类型的记录。应该是这样的:

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

我尝试了pd.groupby(['name', 'type'])['val'].sum(),它给出了加法但无法添加记录数。

【问题讨论】:

【参考方案1】:

将参数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

【讨论】:

【参考方案2】:

您可以尝试旋转,即

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

【讨论】:

如果有很多列而不是这 3 列怎么办?我是否必须以某种方式提及 aggfunc 的特定列名? 是的,很简单。数据透视表中有一个 values 参数。您可以简单地添加values='val'

以上是关于具有多列的groupby,在pandas中具有添加和频率计数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

一次在多列上使用 pandas groupby().apply(list) [重复]

pandas groupby 多列给出了奇怪的索引行为[重复]

Pandas Groupby 多列 - 前 N 个

Pandas:在多列中查找具有匹配值的行的 Pythonic 方法(分层条件)

pandas python中的COUNTIF在具有多个条件的多列上

Python pandas groupby 在多列上聚合,然后旋转