pandas如何根据其他列中的值聚合列的总和

2024-10-01 16:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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

我想按idamount分组,但是每一组,如果memo是{},则为正,neg为负,例如,groupby1时,总数为0,因为-1.0 - 2.0 + 3.0 = 0。在

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

所以结果看起来像

^{pr2}$

Tags: posiddfamountsumgroupbymemo总数
2条回答

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

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

输出:

^{pr2}$

将操作分为两个步骤,您可以实现您想要的目标

df['temp'] = np.where(df.memo == 'pos', df.amount, -df.amount)
df['total_amount'] = df.groupby('id').temp.transform(sum)

相关问题 更多 >

    热门问题