我正在尝试按间隔进行累计和。如果下一个要累加的值是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
答案 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