首页 > 解决方案 > 选择每个特定数量的列的行,其中值为负数,并在 python3 的另一列中转换值 0

问题描述

我有以下数据框

date                  B         C         D         E
2019-07-01 00:00   0.400157  0.978738  2.240893  1.867558
2019-07-01 00:10   -0.950088 0.151357 -0.103219  0.410599
2019-07-01 00:20   1.454274  0.761038  0.121675  0.443863
2019-07-01 00:30   -1.494079 0.205158  0.313068  0.854096

假设行的每个偶数列都包含 -ve 值(可能是多个条件,例如行包含 -ve 值或超过 10),那么我想将下一个奇数列值变为 0

预期产出

date                  B         C         D         E
2019-07-01 00:00   0.400157  0.978738  2.240893  1.867558
2019-07-01 00:10   -0.950088     0    -0.103219     0
2019-07-01 00:20   1.454274  0.761038  0.121675  0.443863
2019-07-01 00:30   -1.494079     0     0.313068  0.854096

如果代码一个班轮解决方案是最好的,或者我们可以为此编写函数

标签: python-3.x

解决方案


此解决方案要求将date列设置为索引:

df.set_index('date', inplace=True)
df[df.shift(axis=1) < 0] = 0
df.reset_index(inplace=True)

df.shift返回一个新的数据框,所有列都向右移动(默认行为;可以使用periods参数更改)。这使您可以将一个单元格与其左侧的一个单元格进行比较。

来源DataFrame.shift


推荐阅读