python - 如何在 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 ]
没关系,它取代了价值观
解决方案
您的代码不起作用,因为对于最后一行代码,新列的值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
推荐阅读
- sql - 在同一张表上比较 2 个子选择的结果的最佳方法是什么?
- nuxt.js - NuxtJS privateRuntimeConfig
- java - 为什么不能向 jtable 添加行?
- function - 有没有更有效的方法来组织/隐藏 python 中的长函数?
- c# - 在 C# 中使用无头 ChromeDriver 下载文件
- amazon-web-services - 启动任务时在 Amazon ECS 上偶尔出现故障并显示不同的错误消息
- angular - 无法读取未定义的属性(读取“_id”)
- python-3.x - PEP8 与 Google Cloud Build 的集成
- deep-learning - Incremental learning for image similarity (Siamese Network) and predicting the label
- php - Add collapse for submenus in dropdown wordpress