具有条件总和的自定义聚合

问题描述 投票:1回答:2

我有一个看起来像这样的数据框

enter image description here

取决于用户操作(可能有四种类型的操作),我想在给定的时间点累积用户的金额。类型A和B的行为代表用户的收入,类型C和D的行为代表用户的费用。

换句话说,我想得到这样的结果

enter image description here

用户1首先执行action_A并得到10。然后,action_B给我们10 + 5 =15。Action_C代表金钱损失,给与使用15-5 =10。最后,action_D与C相同,我们得到10-15 = -5。

我如何用熊猫来实现呢?我尝试使用

进行自定义聚合
expanding().apply(agg_func)

但没有得到令人满意的结果。

python pandas aggregation cumsum
2个回答
1
投票

嘿,希望能给您提示:

首先,我给代表费用的动作加上负号。

df.loc[:,df.action == ['action_C','action_D]].amount = -1 * df.loc[:,df.action == ['action_C','action_D]].amount

然后您创建像这样的结果列

df['result'] = df.amount.cumsum()

0
投票

您可以使用Series.str.containspandas.Series.maskpandas.series.cumsum

c=df['action'].str.contains('C')|df['action'].str.contains('D')

或带有Series.isin

c=df['action'].isin(['action_C','action_D'])


df['result']=df['amount'].mask(c,df['amount']*-1,axis=0).cumsum()
© www.soinside.com 2019 - 2024. All rights reserved.