熊猫DataFrame每个ID加和

时间:2018-09-20 01:40:52

标签: python pandas numpy pandas-groupby

我有这样的df:

idx total
1   5
1   10
1   2
2   10
2   10
2   55

并希望创建另一列,将每个id的总和求和,以得出平均值:

idx total sum   avg
1   5     17    5.66
1   10    17    5.66
1   2     17    5.66
2   10    75    25
2   10    75    25
2   55    75    25

2 个答案:

答案 0 :(得分:2)

通常我们应该使用transform,但是由于transform无法接受带有groupby对象的函数之类的列表,因此我们使用agg + reindex

df.groupby('idx').total.agg(['sum','mean']).reindex(df.idx).reset_index()
Out[64]: 
   idx  sum       mean
0    1   17   5.666667
1    1   17   5.666667
2    1   17   5.666667
3    2   75  25.000000
4    2   75  25.000000
5    2   75  25.000000

#df.groupby('idx').total.agg(['sum','mean']).reindex(df.idx).reset_index().assign(Todat=df.total.values)

答案 1 :(得分:1)

您可以将groupbyagg一起使用merge

df.merge(df.groupby('idx')['total']
           .agg(['sum','mean']), 
         left_on='idx', 
         right_index=True)

输出:

   idx  total  sum       mean
0    1      5   17   5.666667
1    1     10   17   5.666667
2    1      2   17   5.666667
3    2     10   75  25.000000
4    2     10   75  25.000000
5    2     55   75  25.000000