python - Pandas 类别比较

标签 python pandas dataframe comparison categories

我在这里创建了一个示例数据框。

df = pd.DataFrame( np.random.randn(10,2), columns=list('AB'))    

          A         B
0  0.459759         0.152645

1  0.183613         0.756527

2 -1.836027         0.032433

3  0.264336         0.170171

4 -0.276347         0.208389

5  0.677709         0.725274

6 -0.547858         0.376683

7 -0.994759        -0.750373

8  0.556593         1.282167

9 -1.444533         0.589768

df['A_rank']= pd.qcut(df['A'],[0,0.25,0.5,0.75,1],duplicates="drop")

          A         B                A_rank
0  0.459759        0.152645         (0.411, 0.678]

1  0.183613        0.756527         (-0.0464, 0.411]

2 -1.836027        0.032433         (-1.837, -0.883]

3  0.264336        0.170171         (-0.0464, 0.411]

4 -0.276347        0.208389         (-0.883, -0.0464]

5  0.677709        0.725274         (0.411, 0.678]

6 -0.547858        0.376683        (-0.883, -0.0464]

7 -0.994759        -0.750373       (-1.837, -0.883]

8  0.556593        1.282167        (0.411, 0.678]

9 -1.444533         0.589768       (-1.837, -0.883]

我想从上面创建一个新的数据框,如下所示,它基本上是基于 A_rank 的子集。

          A         B             A_rank  A_rank_open_low    A_rank_closed_hi
0  0.459759        0.152645         (0.411, 0.678]           0.411               0.678

5  0.677709        0.725274          (0.411, 0.678]          0.411               0.678

8  0.556593         1.282167         (0.411, 0.678]            0.411               0.678

我不想使用 qcut 使用整数标签,但希望直接使用 qcut 输出本身的标签,但我无法与作为范围的类别 (A_rank) 进行比较。由于我对这种数据类型缺乏了解,以下尝试失败了。

df2 = df[df['A_rank']=="(0.411, 0.678]"]

没有错误,但输出是:

Empty DataFrame    
Columns: [A, B, A_rank]    
Index: []

df2 = df[df['A_rank']== pd.Categorical("(0.411, 0.678]")]

TypeError: Categoricals can only be compared if 'categories' are the same. Categories are different lengths

df2 = df[str(df['A_rank'])=="(0.411, 0.678]"] 

也给出了回溯

我在文档中搜索了分类索引和类别,但找不到太多内容。请帮帮我。

最佳答案

使用Interval :

df2 = df[df['A_rank']== pd.Interval(0.411, 0.678)]

关于python - Pandas 类别比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49479846/

相关文章:

Python:使模块对 TestRunner 可见的正确方法是什么?

python - pandas:如何限制 str.contains 的结果?

r - 导出数据框时,R 是否有保留列格式的方法?

Python条件聚合

python - 使用 python xlib 发生更改焦点事件时如何检测应用程序名称 “correctly”

python - PyCall import ("numpy") 产生 MKL FATAL ERROR

python - 执行器何时(以及如何)将控制权交还给事件循环?

python-3.x - 分组重复项,允许 NaN 等于任何值

python - 查询 Pandas 数据帧索引

python - pandas 通过多个动态列来旋转 DataFrame