Python Pandas 数据列除法计算结果异常问题排查
错误原因
你的除法语句本身写法没有问题,核心错误是百分比的计算时机错误,且错误地对不可累加的比率值做了求和聚合:
- 你在明细行层面提前计算了每行的
第二剂接种数/第一剂接种数比率,后续按State分组聚合时,把这个比率列和其他接种人数字段一起放进了.sum()做加总。比率是相对值,不具备可加性,你得到的527.85本质是UK维度下所有明细行的单行比率累加的结果,完全不是全州汇总层面的接种占比。 - 举个极简验证例子:如果UK下有2条明细记录,第一条第一剂100人、第二剂90人,对应单行比率0.9;第二条第一剂900人、第二剂810人,对应单行比率0.9。按照你现在的逻辑,分组后得到的比率值是0.9+0.9=1.8,和实际总占比(90+810)/(100+900)=0.9完全不符,和你遇到的异常表现完全一致,你得到的527的异常值恰好对应UK下约550条明细行的比率累加结果。
修正方案
把百分比计算步骤挪到分组聚合完成之后,基于汇总后的全州总接种人数计算比率即可,修正后代码如下:
# 先计算单行的部分接种人数绝对值 cov_vac_merge['Partially Vaccinated'] = cov_vac_merge['First Dose'] - cov_vac_merge['Second Dose'] # 仅对可累加的绝对值类接种人数字段做分组求和 covid_summary= cov_vac_merge.groupby('State')[['Vaccinated','First Dose','Second Dose','Partially Vaccinated']].sum().sort_values('Partially Vaccinated' ,ascending=False) # 基于分组汇总后的总数值计算占比 covid_summary['% Partially Vaccinated'] = covid_summary['Second Dose'] / covid_summary['First Dose']
运行后UK对应的% Partially Vaccinated值就会是你预期的≈0.95的正确结果。
内容的提问来源于stack exchange,提问作者Dim24
相关产品推荐
相关产品推荐

