我有一个看起来像这样的数据框
取决于用户操作(可能有四种类型的操作),我想在给定的时间点累积用户的金额。类型A和B的行为代表用户的收入,类型C和D的行为代表用户的费用。
换句话说,我想得到这样的结果
用户1首先执行action_A并得到10。然后,action_B给我们10 + 5 =15。Action_C代表金钱损失,给与使用15-5 =10。最后,action_D与C相同,我们得到10-15 = -5。
我如何用熊猫来实现呢?我尝试使用
进行自定义聚合expanding().apply(agg_func)
但没有得到令人满意的结果。
嘿,希望能给您提示:
首先,我给代表费用的动作加上负号。
df.loc[:,df.action == ['action_C','action_D]].amount = -1 * df.loc[:,df.action == ['action_C','action_D]].amount
然后您创建像这样的结果列
df['result'] = df.amount.cumsum()
您可以使用Series.str.contains,pandas.Series.mask和pandas.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()