如何按多条件筛选pandas DataFrame的行以拆分生成新子df
Pandas 多条件筛选DataFrame的正确写法
错误原因
你写的代码存在两个语法问题:
- 多条件并列时不能省略判断主体,不能直接写
> 2958 & < 3530,需要写出两个完整的布尔判断表达式 - Pandas中逻辑运算符
&的优先级高于比较运算符,不加括号会优先计算&两侧的内容,直接触发语法错误
正确实现代码
基础写法
# 浅层df:深度小于2900m shallow = df[df['depth'] < 2900] # 中层df:深度在2901m到3500m之间 mid = df[(df['depth'] > 2901) & (df['depth'] < 3500)] # 深层df:深度大于3501m deep = df[df['depth'] > 3501]
简化写法
你也可以选择更易读的两种实现方式:
- 用
between方法处理区间判断:
# inclusive='neither'表示不包含区间两端的端点,匹配你的筛选要求 mid = df[df['depth'].between(2901, 3499, inclusive='neither')]
- 用
query方法写更接近自然语言的筛选逻辑:
mid = df.query("depth > 2901 and depth < 3500")
注意事项
- 每个独立的判断条件必须用小括号包裹,否则会触发优先级错误
- 多条件逻辑与用
&,逻辑或用|,逻辑非用~,不要用Python原生的and/or/not,否则会报错
内容的提问来源于stack exchange,提问作者Porsche Adams
相关产品推荐
相关产品推荐

