使用Pandas将数据按前N%分组

7

我有一个pandas系列(作为较大数据框的一部分),如下所示:

0        7416
1       10630
2        7086
3        2091
4        3995
5        1304
6         519
7        1262
8        3676
9        2371
10       5346
11        912
12       3653
13       1093
14       2986
15       2951
16      11859

我希望能按照以下分位数对行进行分组:
Top 0-5%
Top 6-10%
Top 11-25%
Top 26-50%
Top 51-75%
Top 76-100%

首先我使用pd.rank()处理了数据,然后我计划使用pd.cut()将数据分成多个区间,但是它似乎不接受前N%作为参数,而是需要手动指定每个区间的边界。在pandas中有简单的方法来实现这一点吗?或者我需要创建一个lambda/apply函数来计算排名后的每个项目应该放置在哪个区间。

2个回答

12

这是您想要的吗?

pd.qcut(data, [0.05, 0.1, 0.25, 0.5, 0.75, 1])

不太对。当我把这个应用到我的数据集时,它说在前0-5%的百分位有419篇文章,但实际上在我的1674个样本的数据集中,只应该有84个样本在前5%之内。 - metersk
如果你反转数组的顺序会怎样? - crow_t_robot
[0.25, 0.5, 0.75, 0.9, 0.95, 1] 是我的意思。 - crow_t_robot

0
稍微修改一下代码:

pd.qcut(data, [0, 0.05, 0.1, 0.25, 0.5, 0.75, 1])

否则,如果数据集小于0.05(5%),它会给我NaN。

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