我有一个数据框,我想根据两个条件计算累计总和:
我已经成功地获得了第一名或第二名,但我发现很难将两者结合起来
我第一次使用groupby
df['group'] = np.cumsum((df['IsSuccess'] != df['IsSuccess'].shift(1)))
df['SumSale'] = df[['Sale', 'group']].groupby('group').cumsum()
第二次从Pyfunc开始
sumlm = np.frompyfunc(lambda a,b: b if (a+b>5) else a+b, 2, 1)
df['SumSale'] = sumlm.accumulate(df['Sale'], dtype=object)
我的df是,SumSale是我想要的结果
df2 = pd.DataFrame({'Sale': [10, 2, 2, 1, 3, 2, 1, 3, 5, 5],
'IsSuccess': [False, True, False, False, True, False, True, False, False, False],
'SumSaleExpected': [10, 12, 2, 3, 6, 2, 3, 6, 11, 16]})
所以总结一下,我想在总和超过5并且行IsSuccess为真时开始累积总和。如果可能的话,我想避免for循环
谢谢你的帮助
您可以通过考虑两个条件中的
cumsum()
来修改group
方法以考虑这两个条件:既然
group
解释了这两种情况,您可以在这些伪组中直接cumsum()
:我希望我正确理解了你的问题。当累计销售总额大于5且IsSuccess==True时,此示例将减去必要值(“重置”):
印刷品:
编辑:
印刷品:
相关问题 更多 >
编程相关推荐