Python数据帧累积百分比组

2024-09-30 16:29:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在python数据框架上创建百分比组,该数据框架已经具有基于降序排列的累积百分比。例如,我的df是:

import pandas as pd
import numpy as np
data = [1.45, 1.42, 1.43, 1.41, 7.32, 1.41, 5.44, 5.49, 3.4, 7.3, 1.22, 1.9, 7.33, 7.32, 4.1, 5.48, 1.42, 3.4, 3.89, 3.9]
df = pd.DataFrame(data,columns=['values'])
df['cpctl'] = df.rank(pct=True, ascending=False)
print(df)


    values    cpctl
12    7.33    0.050
13    7.32    0.125
4     7.32    0.125
9     7.30    0.200
7     5.49    0.250
15    5.48    0.300
6     5.44    0.350
14    4.10    0.400
19    3.90    0.450
18    3.89    0.500
17    3.40    0.575
8     3.40    0.575
11    1.90    0.650
0     1.45    0.700
2     1.43    0.750
1     1.42    0.825
16    1.42    0.825
5     1.41    0.925
3     1.41    0.925
10    1.22    1.000

现在我希望能够根据这些累积百分位数进行分组。我目前正在使用np.select来完成它,但是有没有一种更简单的方法可以在不使用np.select的情况下获得以下结果?如果要以1%的增量创建组,则这将变得单调乏味

conditions = [(df['cpctl']>0) & (df['cpctl']<=0.10),
              (df['cpctl']>0.10) & (df['cpctl']<=0.20),
              (df['cpctl']>0.20) & (df['cpctl']<=0.30),
              (df['cpctl']>0.30) & (df['cpctl']<=0.40),
              (df['cpctl']>0.40) & (df['cpctl']<=0.50),
              (df['cpctl']>0.50) & (df['cpctl']<=0.60),
              (df['cpctl']>0.60) & (df['cpctl']<=0.70),
              (df['cpctl']>0.70) & (df['cpctl']<=0.80),
              (df['cpctl']>0.80) & (df['cpctl']<=0.90),
              (df['cpctl']>0.90) & (df['cpctl']<=1.0)]

choices = ['Top10','Top20','Top30','Top40','Top50','Top60','Top70','Top80','Top90', 'Top100']
df['groups'] = np.select(conditions, choices, default=0)
df = df.sort_values(by=['cpctl'], ascending=True)
print(df)


    values    cpctl  groups
12    7.33    0.050   Top10
13    7.32    0.125   Top20
4     7.32    0.125   Top20
9     7.30    0.200   Top20
7     5.49    0.250   Top30
15    5.48    0.300   Top30
6     5.44    0.350   Top40
14    4.10    0.400   Top40
19    3.90    0.450   Top50
18    3.89    0.500   Top50
17    3.40    0.575   Top60
8     3.40    0.575   Top60
11    1.90    0.650   Top70
0     1.45    0.700   Top70
2     1.43    0.750   Top80
1     1.42    0.825   Top90
16    1.42    0.825   Top90
5     1.41    0.925  Top100
3     1.41    0.925  Top100
10    1.22    1.000  Top100

Tags: 数据框架dfnpselectvaluestop40top50