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

如何按某列值的区间范围对DataFrame进行索引筛选

解决Pandas按列值范围筛选DataFrame子集的问题

我来帮你搞定这个用Pandas筛选DataFrame子集的问题~你尝试通过Age列的数值范围提取子集,但在条件写法上踩了个小坑,咱们一步步理清楚。

原始代码里的问题

你写的这行代码是没法正确工作的:

mid_range = df[hi>= df['Age']>=lo]

这是因为Pandas的Series比较会返回布尔数组,普通Python的链式比较写法在这里没法被正确解析,要么报错,要么得到完全不符合预期的结果。

正确的实现方式

要筛选出Age在lo(10)到hi(14)之间的行,得用&(逻辑与)连接两个独立条件,而且每个条件都要套上括号——这是为了避免运算符优先级搞乱逻辑。

完整修正后的代码

import pandas as pd
import numpy as np

data = [['Alex',15,4],['Bob',5,1],['Clarke',13,2],['dan',6,2],['eve',19,1],['fin',12,1],['ginny',11,2],['hal',14,1],['ian',13,3],['jen',9,1] ]
df = pd.DataFrame(data,columns=['Name','Age','Pets'])
print("原始DataFrame:")
print(df)

lo = 10
hi = 14

# 筛选Age >= 10的行
lo_range = df[df['Age']>=lo]
print('\nlo_range (Age >= 10):')
print(lo_range)

# 正确筛选10 ≤ Age ≤14的行
mid_range = df[(df['Age'] >= lo) & (df['Age'] <= hi)]
print('\nmid_range (10 ≤ Age ≤14):')
print(mid_range)

关键说明

  • 每个条件df['Age'] >= lo和df['Age'] <= hi都会生成一个布尔Series,标记每行是否满足对应条件
  • 用&连接这两个布尔Series,就能得到同时满足两个条件的行的标记
  • 必须给每个条件加括号:因为&的优先级比>=/<=高,不加括号会先计算lo & df['Age'],直接触发错误

另外提一句,你最后提到的mid_range = df[( df['Age']>=lo) & (df['Age']>=hi)]其实是筛选Age >= 14的行(因为hi比lo大),如果这不是你的预期,记得把第二个条件改成df['Age'] <= hi哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:57:38