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

Numpy where函数逻辑或运算符报错及IN式替代方案咨询

问题解决与优化方案

1. 逻辑或运算错误修复

你遇到的报错源于运算优先级问题:==的优先级低于位运算符|,原代码未给每个相等判断条件单独加括号,导致Python尝试对字符串和布尔值执行位运算,触发类型不匹配错误。

修复后的代码:

sddr_pipeline['Amount'] = np.where(
    (sddr_pipeline['Type'] == 'Renewal - Upgrade') | 
    (sddr_pipeline['Type'] == 'Term change/Re-signing'),
    sddr_pipeline['Delta Amount'], 
    sddr_pipeline['Amount']
)

核心是给每个==判断结果单独加括号,确保先完成值相等判断,再执行向量化逻辑或运算(pandas中用|表示)。

2. 多值匹配的简洁写法

若需匹配更多类型,无需多次用|连接条件,可使用pandas的isin()方法,功能等价于SQL中的IN语句:

# 定义需匹配的所有目标类型
target_types = ['Renewal - Upgrade', 'Term change/Re-signing', '新增类型1', '新增类型2']

# 用isin()实现批量匹配
sddr_pipeline['Amount'] = np.where(
    sddr_pipeline['Type'].isin(target_types),
    sddr_pipeline['Delta Amount'], 
    sddr_pipeline['Amount']
)

isin()会返回布尔数组,标记每行Type是否在目标列表中,代码更简洁,后续新增或修改匹配值时只需维护target_types列表即可。

内容的提问来源于stack exchange,提问作者ModestPi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:43:11