大熊猫:在列上附加分位数

时间:2019-12-21 17:07:25

标签: python-3.x pandas dataframe pandas-groupby quantile

我有以下数据框

   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

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

2 个答案:

答案 0 :(得分:7)

您需要df.rank()pct=True

  

pct:bool,默认为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

答案 1 :(得分:1)

尽管上面的df.rank方法可能是解决此问题的方法。这是将pd.qcutGroupBy结合使用的另一种解决方案:

df['quantile'] = (
    df.groupby('group')['price']
      .apply(lambda x: pd.qcut(x, q=len(x), labels=False)
             .add(1)
             .div(len(x))
            )
)
   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