首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫种类比较

熊猫种类比较
EN

Stack Overflow用户
提问于 2018-03-25 19:10:33
回答 2查看 2.5K关注 0票数 3

我正在这里创建一个样本数据。

代码语言:javascript
复制
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的子集。

代码语言:javascript
复制
          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)进行比较,这是一个范围。由于我对这种数据类型缺乏了解,下面的尝试失败了。

代码语言:javascript
复制
df2 = df[df['A_rank']=="(0.411, 0.678]"]

没有错误,但输出是:

代码语言:javascript
复制
Empty DataFrame    
Columns: [A, B, A_rank]    
Index: []

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

TypeError:分类只能在“类别”相同的情况下进行比较。类别是不同的长度

代码语言:javascript
复制
df2 = df[str(df['A_rank'])=="(0.411, 0.678]"] 

也做了个回溯

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-25 19:13:06

使用Interval

代码语言:javascript
复制
df2 = df[df['A_rank']== pd.Interval(0.411, 0.678)]
票数 7
EN

Stack Overflow用户

发布于 2018-03-25 19:26:28

@jezrael,教你如何正确地做这件事。我想教你如何“调查”类似的案件。

首先检查列dtype:

代码语言:javascript
复制
In [8]: df.dtypes
Out[8]:
A          float64
B          float64
A_rank    category
dtype: object

然后单元格类型:

代码语言:javascript
复制
In [9]: df.iat[0, 2]
Out[9]: Interval(0.0809, 0.539, closed='right')

In [10]: type(df.iat[0, 2])
Out[10]: pandas._libs.interval.Interval
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49479846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档