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
,但是每个组,如果 memo
是 pos
,则它是正的,而 neg
是负的,例如当groupby
1
时,总金额为0,因为-1.0 - 2.0 + 3.0 = 0
.
如果我做 df.groupby('id')['amount'].sum()
,它只考虑 id
和 amount
列,我想知道如何在这里也考虑 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
我试图通过 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
,但是每个组,如果 memo
是 pos
,则它是正的,而 neg
是负的,例如当groupby
1
时,总金额为0,因为-1.0 - 2.0 + 3.0 = 0
.
如果我做 df.groupby('id')['amount'].sum()
,它只考虑 id
和 amount
列,我想知道如何在这里也考虑 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