如何在 Pandas 系列中使用多个条件替换值?

How to replace values using multiple conditions in Pandas series?

我有专栏:数据集["RSI_14D"]

我要分配:

1 如果系列的行 <= 20

-1 如果系列的行 >= 80

0 如果系列的行数 20

我试过了:

dataset.loc[dataset["RSI_14D"] >= 80, 'RSI_14D1'] = -1
dataset.loc[dataset["RSI_14D"] <= 20, 'RSI_14D1'] = 1
dataset.loc[dataset["RSI_14D1"] != 1 & -1, 'RSI_14D1'] = 0

但不起作用

当我写的时候:

dataset["RSI_14D1"][dataset["RSI_14D1"]  == -1  ]

它给了我 0 个值,即使有 30 多行值 >= 80

当我写作时

dataset["RSI_14D1"][dataset["RSI_14D1"]  == 1  ]

没关系,它替换了值

您的代码不起作用,因为对于最后一行代码,新列 RSI_14D1 的值仍然没有为值在 20 到 80 之间的 RSI_14D 行定义。

您可以将最后一行代码替换为:

dataset.loc[dataset["RSI_14D"].between(20, 80,  inclusive='neither'), 'RSI_14D1'] = 0

dataset.loc[(dataset["RSI_14D"] > 20) & (dataset["RSI_14D"] < 80), 'RSI_14D1'] = 0

备选方案

或者,如果您想对 RSI_14D 值介于 20 和 80 之间的情况进行不同的处理,您可以通过为新列 RSI_14D1 设置默认值 0 来实现],如下:

# Add this line at the front:
dataset['RSI_14D1'] = 0

# Keep your first 2 lines of codes:
dataset.loc[dataset["RSI_14D"] >= 80, 'RSI_14D1'] = -1
dataset.loc[dataset["RSI_14D"] <= 20, 'RSI_14D1'] = 1