我有以下数据框
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
我可以遍历整个数据帧并为每个组执行计算。但是,我想知道是否有更优雅的方法来解决此问题?谢谢!
您需要df.rank()
和df.rank()
:
pct:bool,默认为False是否以百分比形式显示返回的排名。
pct=True
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
方法可能是解决此问题的方法。这是将df.rank
与pd.qcut
结合使用的另一种解决方案:
pd.qcut
GroupBy