【问题标题】:groupby with multiple columns with addition and frequency counts in pandas [duplicate]具有多列的groupby,在pandas中具有添加和频率计数[重复]
【发布时间】: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(),它给出了加法但无法添加记录数。

【问题讨论】:

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


    【解决方案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'
      猜你喜欢
      • 2020-05-24
      • 2015-10-15
      • 2018-08-20
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多