首页 > 解决方案 > 从分组数据框中获取百分位数

问题描述

我有一个包含 2 个实验组的数据框,我正在尝试获取百分位数分布。但是,数据已经分组:

df = pd.DataFrame({'group': ['control', 'control', 'control','treatment','treatment','treatment'],
               'month': [1,4,9,2,5,12],
               'ct': [8,4,2,5,5,7]})

我想计算哪个月份代表每组的第 25、50、75 个百分位,但数据框已经按组/月份变量分组。

更新 1:我意识到我没有澄清我遇到的麻烦。这是一个分组数据框,因此控件具有 8 个数据点,其中月份 = 1、4 个(月份 = 4)和 2 个(月份 = 9)。以下百分位值应为:

x = pd.Series([1,1,1,1,1,1,1,1,4,4,4,4,9,9)]
x.quantile([0.25,0.5,0.75])
>> 0.25    1.0
   0.50    1.0
   0.75    4.0
   dtype: float64

按组分组并取分位数并不能提供准确的答案。有没有办法分解计数并获取未分组值的百分位数?最终对象应具有以下值:

             p25 p50 p75
control      1   1   4
treatment    2   5   12

标签: pythonpandasdataframepercentile

解决方案


您可以使用Series.repeat然后获取分位数:

df.groupby('group').apply(lambda x: (x.month.repeat(x.ct)).quantile([0.25, 0.5, 0.75])).rename_axis([None], axis=1)

           0.25  0.50  0.75
group                      
control     1.0   1.0   4.0
treatment   2.0   5.0  12.0

推荐阅读