为什么pandas中groupby后调用median与quantile(0.5)结果不一致?
差异原因及解决方案
核心原因
该问题是pandas 1.0.1版本中groupby.median()和groupby.quantile(0.5)的底层实现逻辑不一致导致的:
- 实现路径不同:1.0.x版本中,
groupby.median()直接调用numpy的nanmedian方法完成计算,而groupby.quantile()采用pandas独立实现的分位数计算逻辑,两套逻辑的数值计算流程不同,会产生微小的浮点精度尾差。 - 插值规则不同:当分组内有效数据量为偶数时,
quantile(0.5)默认采用linear线性插值规则计算中间值,而numpy的nanmedian对偶数个数据直接取中间两数的平均值,二者在整数类型、离散值类型的列计算中会出现可观测的结果差异。
对齐结果的方法
- 调整
quantile的插值参数即可和当前版本的median结果对齐:df.groupby(['PUMA', 'R65'])['HINCP'].quantile(0.5, interpolation='midpoint') - 升级pandas到1.3.0及以上版本也可解决该问题,新版本中
median()内部直接调用quantile(0.5)实现,二者返回结果完全一致。
内容的提问来源于stack exchange,提问作者Rui Wang
相关产品推荐
相关产品推荐

