num=[1,2,3,4,5,6,7,8,-1,2,3,4,5,6,]
df=pd.DataFrame(num)
df['i_want_that']=[1,2,3,4,5,6,7,8,0,0,0,0,0,0]
print(df)
0 i_want_that
0 1 1
1 2 2
2 3 3
3 4 4
4 5 5
5 6 6
6 7 7
7 8 8
8 -1 -1
9 -1 0
10 -1 0
11 -1 0
12 -1 0
13 -1 0
如果“0”值为 -1,则所有剩余行有时将为零 -1 可以出现在任意行
最佳答案
我会在 df[0] != -1
的 bool 掩码上使用 cumprod
。它会一直是 1,直到它到达第一个 -1
,此时它会乘以 False
并变为零。一旦为零,它就保持为零。然后将其乘以df[0]
。但是,我将其转换为捕获第一个 -1
值。
df.assign(new=df[0].ne(-1).shift().fillna(True).cumprod().mul(df[0]))
0 new
0 1 1
1 2 2
2 3 3
3 4 4
4 5 5
5 6 6
6 7 7
7 8 8
8 -1 -1
9 2 0
10 3 0
11 4 0
12 5 0
13 6 0
您可以通过利用底层 numpy 数组来提高性能
v = df[0].values
df.assign(new=v * np.append(True, v[:-1] != -1).cumprod())
0 new
0 1 1
1 2 2
2 3 3
3 4 4
4 5 5
5 6 6
6 7 7
7 8 8
8 -1 -1
9 2 0
10 3 0
11 4 0
12 5 0
13 6 0
关于python - pandas 将行与另一行进行比较并为剩余值设置期望值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511248/