pandas:在列上附加分位数

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

我有以下数据框

   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.x pandas dataframe pandas-groupby quantile
2个回答
6
投票

您需要df.rank()df.rank()

pct:bool,默认为False是否以百分比形式显示返回的排名。

pct=True

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

1
投票

尽管上面的 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 方法可能是解决此问题的方法。这是将df.rankpd.qcut结合使用的另一种解决方案:

pd.qcut
GroupBy
© www.soinside.com 2019 - 2024. All rights reserved.