pandas 如何根据其他列中的值汇总列上的总和

pandas how to aggregate sum on a column depending on values in other columns

我试图通过 groupby 对第二列中的值求和一列中的值,但同时也考虑第三列中的值,df 就像,

id    memo    amount   
 1    pos     1.0 
 1    pos     2.0
 1    neg     3.0
 2    pos     4.0
 2    pos     5.0
 2    neg     6.0
 2    neg     7.0

我想按 id 分组并求和 amount,但是每个组,如果 memopos,则它是正的,而 neg 是负的,例如当groupby1时,总金额为0,因为-1.0 - 2.0 + 3.0 = 0.

如果我做 df.groupby('id')['amount'].sum(),它只考虑 idamount 列,我想知道如何在这里也考虑 memo

所以结果看起来像,

id    memo    amount    total_amount   
 1    pos     1.0       0.0
 1    pos     2.0       0.0
 1    neg     3.0       0.0
 2    pos     4.0       -4.0
 2    pos     5.0       -4.0
 2    neg     6.0       -4.0
 2    neg     7.0       -4.0

分两步操作,通过

可以达到你想要的效果
df['temp'] = np.where(df.memo == 'pos', df.amount, -df.amount)
df['total_amount'] = df.groupby('id').temp.transform(sum)

映射和乘法的另一种有趣方式,即

df['new'] = (df.set_index('id')['memo'].map({'pos':1,'neg':-1})*df['amount'].values)\
            .groupby(level=0).transform(sum).values

输出:

   id memo  amount  new
0   1  pos     1.0  0.0
1   1  pos     2.0  0.0
2   1  neg     3.0  0.0
3   2  pos     4.0 -4.0
4   2  pos     5.0 -4.0
5   2  neg     6.0 -4.0
6   2  neg     7.0 -4.0