【问题标题】:Create two aggregate columns by Group By Pandas通过 Group By Pandas 创建两个聚合列
【发布时间】:2017-01-17 11:07:06
【问题描述】:

我是 DataFrames 的新手,我想对多列进行分组,然后对最后一列求和并保持计数。例如

s = pd.DataFrame(np.matrix([[1, 2,3,4], [3, 4,7,6],[3,4,5,6],[1,2,3,7]]), columns=['a', 'b', 'c', 'd'])

   a  b  c  d
0  1  2  3  4
1  3  4  7  6
2  3  4  5  6
3  1  2  3  7

我想对abc 进行分组,然后对d 求和并计算组中的元素。 我可以数数

s = s.groupby(by=["a", "b", "c"])["d"].count()

    a  b  c
    1  2  3    2
    3  4  5    1
          7    1

我可以总结

s = s.groupby(by=["a", "b", "c"])["d"].sum()

a  b  c
1  2  3    11
3  4  5     6
      7     6

但是我想将它组合起来,使得生成的数据框同时具有 sum 和 count 列。

    a  b  c   sum    count
    1  2  3    11     2
    3  4  5     6     1
          7     6     1

【问题讨论】:

    标签: python pandas dataframe group-by aggregate-functions


    【解决方案1】:

    您可以使用aggregate,或更短的版本agg

    print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'count']))
    #print (s.groupby(by=["a", "b", "c"])["d"].aggregate([sum, 'count']))
           sum  count
    a b c            
    1 2 3   11      2
    3 4 5    6      1
        7    6      1
    

    Pandas documentation.

    sizecount的区别是:

    size 计算 NaN 值,count 不计算。

    如果还需要计数NaN 值:

    print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'size']))
           sum  size
    a b c           
    1 2 3   11     2
    3 4 5    6     1
        7    6     1
    

    【讨论】:

      猜你喜欢
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2014-12-27
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多