首页 > 解决方案 > pandas:附加一个带有分位数值的列

问题描述

我有以下数据框

   item_id group  price
0        1     A     10
1        3     A     30
2        4     A     40
3        6     A     60
4        2     B     20
5        5     B     50

我希望根据每个组的价格添加一个分位数列,如下所示:

item_id       group        price    quantile
 01            A            10        0.25
 03            A            30        0.5
 04            A            40        0.75
 06            A            60        1.0
 02            B            20        0.5
 05            B            50        1.0

我可以遍历整个数据框并为每个组执行计算。但是,我想知道有没有更优雅的方法来解决这个问题?谢谢!

标签: python-3.xpandasdataframepandas-groupbyquantile

解决方案


df.rank()需要pct=True

pct : bool, default False 是否以百分位形式显示返回的排名。

df['quantile']=df.groupby('group')['price'].rank(pct=True)
print(df)

   item_id group  price  quantile
0        1     A     10      0.25
1        3     A     30      0.50
2        4     A     40      0.75
3        6     A     60      1.00
4        2     B     20      0.50
5        5     B     50      1.00

推荐阅读