熊猫:基于附加条件的每个类别的cumsum

时间:2017-06-14 19:08:28

标签: python pandas

我有一个以下形式的pandas数据框:

id   n_items  paid
 1         5     1
 1         2     0
 1         6     0
 1         1     1
 1         3     0
 1         8     0
 2         7     0
 2         7     1
 3         1     1
 3         5     1
 3         2     1

'id'指定客户ID,'n_items'表示在特定交易期间已购买的商品数量,'paid'表示客户是否已为该购买付款。对于每个客户ID,行按时间顺序排列。

对于每一行,我想确定自客户上次付款以来已经购买了多少件商品。输出应如下所示:

id   n_items  paid   cum_days
 1         5     1          5
 1         2     0          2
 1         6     0          8
 1         1     1          9
 1         3     0          3
 1         8     0         11
 2         7     0          7 
 2         7     1         14
 3         1     1          1
 3         5     1          5
 3         2     1          2

我找到了this帖子,它解决了类似的问题,但我没有为此目的修改过它。

1 个答案:

答案 0 :(得分:3)

使用cumsum计算组变量以识别模式(自上次支付以来),然后为每个ID和无薪期计算 n_items 的cumsum :

df['cumdays'] = df.groupby([
                    df.id, df.paid.cumsum().shift().fillna(0)
                ]).n_items.cumsum()
df

enter image description here