首页 > 解决方案 > 如何在 Pandas 系列中使用多个条件替换值?

问题描述

我有专栏:数据集[“RSI_14D”]

我想分配:

1 如果系列的行 <= 20

-1 如果系列的行 >= 80

0 如果系列的行 20<x<80

我试过:

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  ]

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

当我写

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

没关系,它取代了价值观

标签: pythonpandasdataframereplaceseries

解决方案


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

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

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 之间时以不同方式处理这种情况,您可以通过设置0新列的默认值来实现RSI_14D1,如下所示:

# 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

推荐阅读