python - pandas 将行与另一行进行比较并为剩余值设置期望值?

标签 python pandas dataframe

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/

相关文章:

Python 2.7 OpenCV : Extracting features/descriptors from image coordinates

python - 再次循环导入

python数据框到字典,键值问题

python - 如何根据索引进行计算?

r - 安装 flextable 库时出错

python - 如何删除具有 1000 列的大型 df 中的错误值

r - 如何从 R 中大小为 N 的数据帧中获取大小为 n 的所有可能子样本?

python - 使用 matplotlib - python 调整文本和条宽的条形图大小

javascript - 如何将多个 date1 即(10/12/2016)、date2 即(23/12/2016)传递到 django 中的url?

python - 使用 pandas 将具有相同索引的行中的信息合并到单行中