按另一列分组并提取熊猫中一列的上限值

问题描述 投票:0回答:1

我想从以下数据框中获取每个(0.10, 0.20, ..., 0.50)的多个自定义百分位数type值:

    type    value
0   a   90
1   a   63
2   a   11
3   a   61
4   a   78
5   a   67
6   a   89
7   a   12
8   a   43
9   a   30
10  b   72
11  b   84
12  b   74
13  b   66
14  b   80
15  b   75
16  b   47
17  b   22
18  b   5
19  b   64
20  b   32
21  b   45

我已经执行此步骤:

df['percentile_rank'] = df.groupby('type').value.rank(pct=True).round(2)

输出:

    type    value   percentile_rank
0   a   90  1.00
1   a   63  0.60
2   a   11  0.10
3   a   61  0.50
4   a   78  0.80
5   a   67  0.70
6   a   89  0.90
7   a   12  0.20
8   a   43  0.40
9   a   30  0.30
10  b   72  0.67
11  b   84  1.00
12  b   74  0.75
13  b   66  0.58
14  b   80  0.92
15  b   75  0.83
16  b   47  0.42
17  b   22  0.17
18  b   5   0.08
19  b   64  0.50
20  b   32  0.25
21  b   45  0.33

但是我不知道如何获得这样的预期结果:

    type    top10   top20   top30   top40   top50
0     a       89      78      67      63      61
1     b       80      75      72      66      64

在上表中,top10代表percentile_rank等于0.90top20代表0.80,依此类推。如果没有精确的百分位值,则取最接近的值,例如,top10代表typeb,我使用80percentile_rank0.92的值。

感谢您的帮助。

python pandas dataframe rank percentile
1个回答
0
投票

我们可以做quantile

s=df.groupby('type').value.apply(lambda x : x.quantile([0.9,.8,.7,.6,.5])).unstack()
Out[64]: 
       0.9   0.8   0.7   0.6   0.5
type                              
a     89.1  80.2  70.3  64.6  62.0
b     79.5  74.8  73.4  69.6  65.0
© www.soinside.com 2019 - 2024. All rights reserved.