带有标志条件的 Pandas 按 cumsum 分组

Mak*_*Jim 6 python dataframe pandas cumsum pandas-groupby

假设我有以下数据框

日期 旗帜 用户 编号
0 2019-01-01 1 A 10
1 2019-01-02 0 A 20
2 2019-01-03 1 30
3 2019-03-04 1 40

我想仅在 flag == 1 时创建按用户分组的数字的累积和,所以我会得到这个:

日期 旗帜 用户 编号 累积量
0 2019-01-01 1 A 10 10
1 2019-01-02 0 A 20 10
2 2019-01-03 1 30 30
3 2019-03-04 1 40 70

到目前为止,我能够按标志进行汇总,忽略用户组

df['cumsum'] = df[df['flag'] == 1 ]['num'].transform(pd.Series.cumsum)
Run Code Online (Sandbox Code Playgroud)

或用户忽略标志的 cumsum

df['cumsum'] = df.groupby('user')['num'].transform(pd.Series.cumsum)
Run Code Online (Sandbox Code Playgroud)

我需要帮助让他们一起工作。

小智 4

您可以乘以num得到flagwhere num = 0flag = 0group byusercumsum

df['cumsum'] = df['num'].mul(df['flag']).groupby(df['user']).cumsum()
Run Code Online (Sandbox Code Playgroud)

输出:

>>> df
         date  flag user  num  cumsum
0  2019-01-01     1    a   10      10
1  2019-01-02     0    a   20      10
2  2019-01-03     1    b   30      30
3  2019-03-04     1    b   40      70
Run Code Online (Sandbox Code Playgroud)