我使用 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,所以它也没有帮助。我该怎么办?
最佳答案
pandas.qcut
方法返回一个带有 pandas.IntervalIndex
的分类系列。要索引该系列,您需要使用 pandas.Interval
进行查询s:
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
的字符串表示形式。数据框中实际存在的对象。
关于python - 无法按分位数选择 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67794530/