按Group By Pandas创建两个聚合列

时间:2016-09-09 10:14:29

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

我是DataFrames的新手,我想将多个列分组,然后对最后一列进行求和并计算。 e.g。

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

1 个答案:

答案 0 :(得分: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