Python重置列中间隔的累积总和

时间:2019-11-15 19:47:32

标签: python pandas cumsum

我正在尝试按间隔进行累计和。如果下一个要累加的值是0,则将总和重置为零。下面是一个示例,其后是所需的结果。我试过使用numpy'convolve'和'groupby',但是除了通过创建遍历所有行的def之外,无法想出一种方法来进行重置。我缺少一种聪明的方法吗?请注意,“ x”列中的实数是用0隔开的实数。

import numpy as np
import pandas as pd

a = pd.DataFrame([[0,0],[1,0],[1,0],[1,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],\
[0,0],[0,0],[0,0],[0,0],[1,0],[1,0],[0,0]], columns=["x","y"])

def patch(k):
  k["z"] = k.x.cumsum()
  return k

print(patch(a))

当前输出:

    x  y  z
0   0  0  0
1   1  0  1
2   1  0  2
3   1  0  3
4   0  0  3
6   0  0  3
7   0  0  3
9   0  0  3
10  0  0  3
12  0  0  3
13  1  0  4
15  1  0  5
16  0  0  5

所需的输出:

    x  y  z
0   0  0  0
1   1  0  1
2   1  0  2
3   1  0  3
4   0  0  0
6   0  0  0
7   0  0  0
9   0  0  0
10  0  0  0
12  0  0  0
13  1  0  1
15  1  0  2
16  0  0  0

1 个答案:

答案 0 :(得分:1)

在cumsum上进行分组:

a['z'] = a.groupby(a['x'].eq(0).cumsum())['x'].cumsum()

输出:

    x  y  z
0   0  0  0
1   1  0  1
2   1  0  2
3   1  0  3
4   0  0  0
6   0  0  0
7   0  0  0
9   0  0  0
10  0  0  0
12  0  0  0
13  1  0  1
15  1  0  2
16  0  0  0