gpt4 book ai didi

python - Pandas 将一行与另一行进行比较并为剩余值(value)创造值(value)?

转载 作者:行者123 更新时间:2023-11-28 22:28:34 25 4
gpt4 key购买 nike

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 将一行与另一行进行比较并为剩余值(value)创造值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com