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 = 0、flag = 0group byuser和cumsum:
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)