提问者:小点点

在熊猫中用80%取代80%以上的数值


我有一个df,如下所示df:

Id     gender     age       salary
1      m          27        100
2      m          26        100000
3      m          57        180
4      f          27        150
5      m          57        200
6      f          29        100
7      m          47        130
8      f          27        140
9      m          37        100
10     f          43        2000

从上面我想把大于或等于80百分位值的值替换为80百分位值。

预期产出:

Id     gender     age       salary
1      m          27        100
2      m          26        200
3      m          57        180
4      f          27        150
5      m          57        200
6      f          29        100
7      m          47        130
8      f          27        140
9      m          37        100
10     f          43        200

共1个答案

匿名用户

让我们试试:

quantiles = df.salary.quantile(0.8)

df.loc[df.salary > quantiles, 'salary'] = quantiles

输出(无法将200作为.8百分位数):

   Id gender  age  salary
0   1      m   27   100.0
1   2      m   26   560.0
2   3      m   57   180.0
3   4      f   27   150.0
4   5      m   57   200.0
5   6      f   29   100.0
6   7      m   47   130.0
7   8      f   27   140.0
8   9      m   37   100.0
9  10      f   43   560.0

如果要在性别内填充:

quantiles = df.groupby('gender')['salary'].transform('quantile', q=0.8)

输出:

   Id gender  age  salary
0   1      m   27     100
1   2      m   26     200
2   3      m   57     180
3   4      f   27     150
4   5      m   57     200
5   6      f   29     100
6   7      m   47     130
7   8      f   27     140
8   9      m   37     100
9  10      f   43     890