python - 如果满足另一个条件,也将 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
解决方案
IIUC,您可以使用这两个条件来设置您的值:
- PercentageDiff 小于等于 1
- 前面的 AboveOrEqual99 是 True
df.loc[df['PercentageDiff'].le(1)
& df['AboveOrEqual99'].shift(), 'AboveOrEqual99'] = True
推荐阅读
- haskell - 使用 Ord 创建和比较空列表
- amazon-dynamodb - 在 Alexa Skill 上更新 Item DynamoDB 表时出现问题
- vue.js - 如何同时使用 Vue-Router 和 Gorilla Mux 路由器
- python - 使用python的随机数生成器
- php - 在 PHP 中重新加载页面和变量的值
- spring-boot - 如何为不同的记录调用适当的项目处理器?
- scala - Spark 表连接 - 资源分配问题
- python - Python3 返回值的缩进
- r - R-studio 中的错误代码:data.frame 中的错误,参数暗示不同的行数
- ruby-on-rails - Rails:语法错误,意外结束,期待 ')' '.freeze; 结束^~~