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

如何用Python内置operator.or_实现Pandas多条件OR运算?

问题分析与解决方案

你的代码失效的核心原因是:operator.or_实现的是Python原生逻辑或,而非Pandas Series的元素级逻辑或。原生逻辑或会把整个Series当作单个布尔值判断(非空Series直接视为True),不会对每个元素执行或运算,这才导致测试不通过。

下面提供两种可行的解决方案:

方案1:直接使用Pandas元素级或运算符|(推荐)

这是Pandas布尔运算的标准写法,直观且性能更优,同时支持多个条件链式组合:

import pandas as pd

def fault_finder(df):
    # 提取公共温度条件,减少重复代码
    temp_ok = df['temp1'] >= df['temp2']
    
    # 拆分各状态的判断条件
    state_2 = temp_ok & (df['free_clg_signal'] > 0.2) & (df['mechanical_clg_signal'] < 0.1)
    state_3 = temp_ok & (df['mechanical_clg_signal'] > 0.01) & (df['free_clg_signal'] == 0.2)
    state_4 = temp_ok & (df['mechanical_clg_signal'] > 0.01) & (df['free_clg_signal'] > 0.9)
    
    # 元素级或组合所有条件,转成0/1整数标记
    df['flag'] = (state_2 | state_3 | state_4).astype(int)
    
    return df

方案2:结合functools.reduce使用operator.or_(满足你的需求)

如果一定要用operator.or_,可以借助reduce迭代处理多个条件,每次取两个条件执行或运算:

import operator
import pandas as pd
from functools import reduce

def fault_finder(df):
    temp_ok = df['temp1'] >= df['temp2']
    
    state_2 = temp_ok & (df['free_clg_signal'] > 0.2) & (df['mechanical_clg_signal'] < 0.1)
    state_3 = temp_ok & (df['mechanical_clg_signal'] > 0.01) & (df['free_clg_signal'] == 0.2)
    state_4 = temp_ok & (df['mechanical_clg_signal'] > 0.01) & (df['free_clg_signal'] > 0.9)
    
    # 用reduce迭代调用operator.or_,实现多条件或
    df['flag'] = reduce(operator.or_, [state_2, state_3, state_4]).astype(int)
    
    return df

关键说明

  • 拆分条件并提取公共部分,让代码可读性更强,也更容易维护。
  • Pandas的元素级布尔运算要用|(或)、&(与)、~(非),而非Python原生的or/and/not,后者会对整个Series做布尔判断,而非逐元素运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:32:01