Pandas 按分类区间过滤

Ist*_*oki 6 python pandas

我创建一个数据框并将一列分类为间隔:

df_test = pd.DataFrame({'col': [0,1,2,3,4,5,6]})
df_test['cat']= pd.cut(df_test['col'],[-1.,0.,3.,10.])
df_test

        col     cat
    0   0   (-1.0, 0.0]
    1   1   (0.0, 3.0]
    2   2   (0.0, 3.0]
    3   3   (0.0, 3.0]
    4   4   (3.0, 10.0]
    5   5   (3.0, 10.0]
    6   6   (3.0, 10.0]
Run Code Online (Sandbox Code Playgroud)

现在我想使用 cat 列过滤此数据框:

df_test[df_test['cat'] == pd.Interval(left=1., right=2.)]

    col     cat
1   1   (0.0, 3.0]
2   2   (0.0, 3.0]
3   3   (0.0, 3.0]
Run Code Online (Sandbox Code Playgroud)

为什么用 (1., 2.] 检查相等性会产生这个结果?我期望得到一个空结果,因为数据帧中不存在该间隔。

我应该使用不同的方法进行过滤吗?

jez*_*ael 2

为了精确匹配,可以使用 hack 解决方案 - 将两者都转换为字符串:

a = df_test[df_test['cat'].astype(str) == str(pd.Interval(left=1., right=2.))]
Run Code Online (Sandbox Code Playgroud)

或者使用apply

a = df_test[df_test['cat'].apply(lambda x: x == pd.Interval(left=1., right=2.))]
print (a)
Empty DataFrame
Columns: [col, cat]
Index: []
Run Code Online (Sandbox Code Playgroud)

有关为何针对支票会员资格实施此操作的更多信息,请参见此处