在一系列行之间创建累积总和

时间:2018-03-02 07:52:09

标签: python pandas

  • 第一栏 cond 包含1或0
  • 第二列事件包含1或0
  • 我想创建第三列,其中每一行是两行之间COND列的累计和(cond%4的累计),其中event == 1(事件== 1的第一行必须包含在累积总和中但不是最后一行)
+------+-------+--------+
| cond | event | Result |
+------+-------+--------+
| 0    | 0     | 0      |
| 1    | 0     | 0      |
| 0    | 1     | 0      |
| 1    | 0     | 1      |
| 1    | 0     | 2      |
| 0    | 0     | 2      |
| 1    | 0     | 3      |
| 1    | 0     | 0      |
| 1    | 0     | 1      |
| 1    | 0     | 2      |
| 1    | 1     | 1      |
+------+-------+--------+

1 个答案:

答案 0 :(得分:1)

这可以通过pandas.groupby.transformcumsum

轻松解决
event_cum = df['event'].cumsum()
result = df['cond'].groupby(event_cum).transform('cumsum').mod(4)
result[event_cum == 0] = 0  # rows before the first event
0     0
1     0
2     0
3     1
4     2
5     2
6     3
7     0
8     1
9     2
10    1
Name: cond, dtype: int64