Pandas分类相等性测试

3

我正在使用 pandas 0.24.2,但无法对 Categorical 实例执行简单的等式测试。例如,使用以下代码:

Original Answer 翻译成“最初的回答”。

d = DataFrame({"x" : [1, 2, 3, 4]})
d["y"] = pd.cut(d["x"], bins=3)

d的内容现在是:

    x   y
0   1   (0.997, 2.0]
1   2   (0.997, 2.0]
2   3   (2.0, 3.0]
3   4   (3.0, 4.0]

然而,我无法将 y 与字符串值进行相等性测试,例如:
d["y"] == '(3.0, 4.0]'

生成:

0    False
1    False
2    False
3    False
Name: y, dtype: bool

我知道y的底层类型是Categorical,这是由于cut()的输出所确定的。然而,我在Categorical中找不到任何特殊的相等方法;此外,文档甚至指出,“相等比较适用于...标量”。我的方法有什么问题?

最初的回答:


1
y 列的类型是 pd.Interval。所以比较语句 d["y"] == pd.Interval(0.997, 2.0, closed='right') 应该能正常工作。 - undefined
2个回答

4

那么就将其转化为间隔格式,并传递给pd.Interval

d.y==pd.Interval(3,4)
Out[255]: 
0    False
1    False
2    False
3     True
Name: y, dtype: bool

2
另外,您可以将其转换为“字符串”数据类型:
d["y"].astype(str) == "(3.0, 4.0]"

输出:

0    False
1    False
2    False
3     True
Name: y, dtype: bool

1
这绝对有效 - 在这个答案和其他答案之间做出了艰难的选择。在很多方面,这种方法似乎更直观;有趣的是,为了使其工作,实际上必须完全退出“Categorical”类型。在pandas API中有很多地方我注意到类似的情况(索引等)。再次感谢您的帮助! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接