将Excel公式=IFERROR(IFS(X3=TRUE,1,X2=TRUE,1),0)转换为pandas实现
实现pandas生成SPRAY列的方案
需求逻辑拆解
要生成SPRAY列,满足以下任一条件时显示1,其余情况显示0:
- 当前行的
spray值为True - 当前行
spray值为False,但上一行的spray值为True(即从True切换到False的过渡行)
代码实现
1. 构造示例测试数据
import pandas as pd # 匹配你提供的示例数据 data = {'spray': [True, False, False, True, True, True, False, False, True, True]} df = pd.DataFrame(data)
2. 生成SPRAY列(简洁版)
# 核心逻辑:当前行True 或 上一行True → 1,否则0 df['SPRAY'] = (df['spray'] | df['spray'].shift(1).fillna(False)).astype(int)
3. 等价的详细写法(便于理解逻辑)
如果需要更清晰地对应原始条件,可以用显式的逻辑判断:
# 条件1:当前行spray为True cond1 = df['spray'] == True # 条件2:当前行spray为False且上一行spray为True cond2 = (df['spray'] == False) & (df['spray'].shift(1) == True) # 合并条件并转成整数 df['SPRAY'] = (cond1 | cond2).astype(int)
验证结果
运行代码后,DataFrame的输出与你提供的示例完全一致:
spray SPRAY 0 True 1 1 False 1 2 False 0 3 True 1 4 True 1 5 True 1 6 False 1 7 False 0 8 True 1 9 True 1
关键说明
shift(1):用于获取上一行的spray值,第一行无前置行,返回NaN,通过fillna(False)将其替换为False,避免逻辑判断异常。astype(int):将布尔值True/False直接转换为整数1/0,满足SPRAY列的数值格式要求。
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

