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

使用pd.qcut生成分位数区间后无法筛选Pandas DataFrame怎么办

问题根因

pd.qcut生成的bins列数据类型为分类(Categorical)类型,列内每个元素都是pandas.Interval区间对象,不是字符串,也不能直接用不规范的区间字面量匹配,因此你之前的两种写法都不生效:

  • 直接写(-0.001, 9.9]]不符合Python基础语法,直接触发语法错误
  • 把区间转为字符串做等值匹配,类型不匹配,因此返回空结果
正确筛选方案

方案1:构造Interval对象匹配

按照qcut默认的右闭合规则,构造对应边界的Interval对象做等值匹配即可:

import pandas as pd

# 构造目标区间对象,closed指定右闭合和qcut默认规则对齐
target_bin = pd.Interval(left=-0.001, right=9.9, closed="right")
# 执行筛选
filter_df = df[df["bins"] == target_bin]

方案2:生成区间时指定标签简化后续筛选

如果后续需要频繁按分位筛选,可以在生成bins时直接指定分位序号作为标签,后续筛选不需要记边界:

# 生成bins时指定labels为1-10,对应10个十分位
df["bins"] = pd.qcut(df["values"], q=10, labels=range(1, 11))
# 筛选第一个十分位直接匹配标签即可
filter_df = df[df["bins"] == 1]

方案3:直接取用生成的分类区间列表

如果不确定生成的区间边界,可以先提取所有生成的区间列表,直接取用对应位置的区间做匹配:

# 查看所有分位区间的列表
all_bins = df["bins"].cat.categories
# 取第一个区间做筛选
filter_df = df[df["bins"] == all_bins[0]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:27:02