如何在 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
我有专栏:数据集["RSI_14D"]
我要分配:
1 如果系列的行 <= 20
-1 如果系列的行 >= 80
0 如果系列的行数 20 我试过了: 但不起作用 当我写的时候: 它给了我 0 个值,即使有 30 多行值 >= 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 ]
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