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

如何在Pandas中使用OR语句实现多条件链式筛选

Pandas链式编写多筛选条件(含or逻辑)的解决方案

首先你给出的示例代码存在两个可优化点:

  1. 语法括号不全,且Python原生or不能直接用于Pandas向量化条件筛选,需要改用按位或运算符|
  2. &/|运算符优先级高于比较运算符,每个独立判断条件必须用小括号包裹,否则会出现运算顺序错误

方法1:使用query()方法(最简洁,推荐)

query是Pandas专门为链式操作设计的筛选方法,支持直接写逻辑表达式,无需重复写df.前缀,还可以直接用and/or写法,可无缝拼接在其他Pandas操作之后:

# 基础链式筛选
res = df.query("(col1 > 2 and col2 < 5) or (col5 == 5 and col3 >= 78)")

# 多操作链式示例(前面接分组、聚合等操作都可以直接拼接)
res = df.groupby("col1", as_index=False).sum().reset_index().query("(col1 > 2 and col2 < 5) or (col5 == 5 and col3 >= 78)")

方法2:使用loc+lambda实现链式筛选

如果习惯原生Pandas条件写法,可以用lambda接收链式过程中的临时DataFrame,无需提前赋值变量:

res = df.loc[lambda df_: (df_.col1 > 2) & (df_.col2 < 5) | (df_.col5 == 5) & (df_.col3 >= 78)]

注意事项

  • 非query场景下,禁止使用Python原生and/or/not做向量化条件判断,需替换为&/|/~
  • 所有独立比较条件必须用小括号包裹,避免运算符优先级导致的逻辑错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:18:03