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

如何在pandas DataFrame同一列上合并两个范围筛选条件

问题原因梳理

  1. 用&无返回结果的原因
  • 你先执行了df = df.loc[mask],这一步已经将原df过滤为仅包含age在30-40区间的行,后续生成的mask1是基于这个过滤后的小数据集计算的,自然不存在同时满足30-40和50-60两个区间的数值,所以返回空结果。
  • 此外&是按位与运算符,逻辑是「同时满足两个条件」,你的需求是只要落在任意一个区间就算符合,本身就不应该用&做合并。
  1. 用or报错的原因
    Python原生的or/and运算符会尝试将整个布尔Series转换为单个布尔值,pandas不支持这种隐式转换,因此会抛出你看到的ValueError。pandas中针对布尔序列的逻辑或、逻辑与运算,对应使用|(按位或)和&(按位与)运算符。

正确实现方式

步骤1:基于原始未过滤的数据集生成两个筛选条件

import pandas as pd
# 原始数据
data = [ 23, 50, 32, 21, 24, 20, 68, 52, 41, 44, 29, 70, 33, 56, 72]
df = pd.DataFrame(data, columns = ['age'])

# 两个筛选条件都基于完整的原始df生成
mask = (df['age'] >= 30) & (df['age'] <=40)
mask1 = (df['age'] >= 50) & (df['age'] <=60)

步骤2:用|合并两个条件做筛选

# 满足任意一个区间条件即保留
df_filtered = df.loc[mask | mask1]

更简洁的写法

可以用pandas内置的between方法简化区间判断代码:

df_filtered = df.loc[df['age'].between(30,40) | df['age'].between(50,60)]

最终筛选结果会保留age为32、33、50、52、56的5行数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:00:05