首页 > 解决方案 > 如果满足另一个条件,也将 True 之后的值设置为 True

问题描述

我的 Dataframe 如下所示(AboveOrEqual99result 表示操作后 AboveOrEqual99 列的状态):

指数 百分比 百分比差异 高于或等于99 高于或等于99的结果
1 50 0 错误的 错误的
2 100 50 真的 真的
3 99 -1 真的 真的
4 98 -1 错误的 真的
5 99 1 真的 真的
6 50 -49 错误的 错误的
7 99 49 真的 真的
8 98 -1 错误的 真的
9 97 -1 错误的 真的
10 96 -1 错误的 真的
11 50 -46 错误的 错误的

现在我想将这些值添加到与AboveOrEqual99%1 或以下有差异的 Column 中。另请注意,这可能不止一次发生。因此,如果存在 99、98、97、96 等序列,则所有这些列都应设置为True.
有谁知道如何做到这一点?最好没有 for 循环,因为数据很大。

我最好的尝试是这样,但它错过了与前几行的关系。(因此将包括像 24,25,25 这样的序列)这不是我想要的。

df["AboveOrEqual99"] = df["AboveOrEqual99"] | df["PercentageDiff"].abs()<=1

标签: pythonpandasdataframe

解决方案


IIUC,您可以使用这两个条件来设置您的值:

  • PercentageDiff 小于等于 1
  • 前面的 AboveOrEqual99 是 True
df.loc[df['PercentageDiff'].le(1)
     & df['AboveOrEqual99'].shift(), 'AboveOrEqual99'] = True

推荐阅读