首页 > 解决方案 > 无法按分位数选择 Pandas DataFrame

问题描述

我使用 Pandas qcut 函数将一列值排序为分位数,但我无法通过这些分位数过滤 DataFrame,这里有一个示例:

df = pd.DataFrame(data = [i for i in range(100)], columns = ['values'])
df['bins'] = pd.qcut(df['values'], q = 10)

这给了我这个数据框:

数据框

但是当我尝试按一些十分位数过滤时:

df[df['bins'] == (-0.001, 9.9]]

我得到: SyntaxError: invalid syntax

将间隔更改为字符串,就像df[df['bins'] == '(-0.001, 9.9]']只返回一个空的 DataFrame,所以它也无济于事。我该怎么办?

标签: pythonpandasdataframe

解决方案


pandas.qcut方法返回一个带有pandas.IntervalIndex. 要索引到该系列,您需要使用pandas.Intervals 进行查询:

df = pd.DataFrame(data = [i for i in range(100)], columns = ['values'])
df['bins'] = pd.qcut(df['values'], q = 10)
df.loc[df['bins'] == pd.Interval(-0.001, 9.9)]

使用时出现语法错误的原因df['bins'] == (-0.001, 9.9]是 Python 需要相同类型的括号匹配。在打印数据帧时,它确实显示了该序列,因为这与传统表示法相匹配,但它只是pd.Interval实际在数据帧中的对象的字符串表示形式。


推荐阅读