python - 从分组数据框中获取百分位数
问题描述
我有一个包含 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
解决方案
您可以使用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
推荐阅读
- angular - 使用带有 ReactiveForms 的 ControlValueAccessor 为外部和内部控件提供相同的值
- javascript - 如何在div中拖动元素
- php - 将sql查询的结果输出到php中按天分组
- nunjucks - 如何使用 nunjucks 替换字符串中的字符
- qt - 没有扩展名的文件的 QFileSystemModel setNameFilter 格式
- android - android.hardware.Camera 是否适用于较新版本的 android?
- javascript - 无法从 HTML 的 jsPDF 进行 AJAX 调用
- reactjs - 这是 React 的 bug 还是一个惊人的 React 特性?
- scala - 用 ReactiveMongo 使用事务的方式是什么?
- wpf - 如何在 XAML 中创建模型并为其赋值