在下面的数据框中,我想计算每件产品促销完成后的购买数量。所以对于香蕉来说,促销活动是在1-5-2018完成的,我想收到它之后的购买总数(8次)。我如何在python中有效地做到这一点?
Date product Purchase Promo
0 01-01-2018 banana 1 0
1 01-02-2018 apple 2 0
2 01-03-2018 apple 3 0
3 01-04-2018 banana 4 0
4 01-05-2018 banana 1 1
5 01-06-2018 banana 3 0
6 01-07-2018 apple 1 0
7 01-08-2018 banana 4 0
8 01-09-2018 banana 1 0
答案 0 :(得分:3)
您可以使用cummax
设置条件在促销等于1后计算,然后使用mask
消除促销本身:
df.groupby('product')\
.apply(lambda x: x.loc[x['Promo'].cummax().mask(x['Promo']==1,0) == 1,
'Purchase'].sum())
输出:
product
apple 0
banana 8
dtype: int64