You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:30:23