You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确合并含百分比的DataFrame行?区域合并场景示例

合并区域后准确计算百分比的方法

你的问题核心是百分比不能直接取算术平均,因为每个区域的人口基数不同,必须用加权平均计算,权重就是各区域的人口数量。

示例数据

区域人口数量汽车拥有者占比(%)就业者占比(%)
A32062.578.13
B21569.7783.72
C41874.1690.91

正确计算逻辑

合并B、C为D区域时,要先把百分比转换为实际人数,求和后再除以D区域的总人口,得到准确占比:

  1. 计算单区域实际人数:实际人数 = 人口数量 × 百分比/100
  2. 合并区域后,汇总实际人数与总人口
  3. 最终占比 = (汇总实际人数 / 汇总总人口) × 100

以汽车拥有者占比为例:

  • B区域汽车拥有者人数:215 × 69.77% ≈ 150
  • C区域汽车拥有者人数:418 × 74.16% ≈ 310
  • D区域总人口:215 + 418 = 633
  • D区域汽车拥有者占比:(150+310)/633 ×100 ≈ 72.67%

如果直接取B、C的百分比均值:(69.77+74.16)/2 ≈71.96%,和准确值有明显差异,这就是未考虑人口权重导致的误差。

Pandas实现代码

假设你的DataFrame名为df,按以下步骤操作:

  1. 定义区域合并映射:
region_mapping = {
    'B': 'D',
    'C': 'D',
    'A': 'A'
}
df['新区域'] = df['区域'].map(region_mapping)
  1. 计算各区域实际人数列:
df['汽车拥有者人数'] = df['人口数量'] * df['汽车拥有者占比(%)'] / 100
df['就业者人数'] = df['人口数量'] * df['就业者占比(%)'] / 100
  1. 分组汇总并计算准确百分比:
result = df.groupby('新区域').agg(
    总人口=('人口数量', 'sum'),
    汽车拥有者总人数=('汽车拥有者人数', 'sum'),
    就业者总人数=('就业者人数', 'sum')
).assign(
    汽车拥有者占比(%)=lambda x: (x['汽车拥有者总人数'] / x['总人口']) * 100,
    就业者占比(%)=lambda x: (x['就业者总人数'] / x['总人口']) * 100
).round(2)  # 保留两位小数

执行后result的最终结果:

新区域总人口汽车拥有者总人数就业者总人数汽车拥有者占比(%)就业者占比(%)
A320200.00250.0262.5078.13
D633460.00543.0072.6785.78

补充建议

  • 以后遇到带百分比的合并计算,都要先转换为实际基数(人数、金额等)再汇总,避免算术平均的误差。
  • 如果有更多百分比列,可以用循环批量处理,不用手动逐个添加计算列。

内容的提问来源于stack exchange,提问作者Mimikable _

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:30:26