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

如何用Pandas遍历DataFrame列计算城市人口占所属国百分比

解决方法

你的代码核心问题是用了低效的嵌套循环,且没利用Pandas的矢量化操作(这是Pandas的核心优势,比逐行循环高效且逻辑清晰)。另外需要先明确提取固定的国家总人口,再分别计算对应城市类别的占比。

修正步骤

  1. 读取并清理数据:把带逗号的人口字符串转为数值类型,确保能正常计算。
  2. 提取固定国家人口:所有A类城市属于A国,所有B类城市属于B国,直接从数据中取出两国的总人口值。
  3. 矢量化计算占比:直接对整列做运算,无需逐行遍历。
  4. 新增结果列:把计算好的占比列添加到原数据中。

完整代码

import pandas as pd

# 读取Excel数据,列名需和你的Excel实际列名对应
df = pd.read_excel("population.xlsx", usecols=['国家', '国家人口', 'A类城市', 'A类城市人口', 'B类城市', 'B类城市人口'])

# 清理数据:去除人口数值中的逗号,转为浮点型
df['国家人口'] = df['国家人口'].str.replace(',', '').astype(float)
df['A类城市人口'] = df['A类城市人口'].str.replace(',', '').astype(float)
df['B类城市人口'] = df['B类城市人口'].str.replace(',', '').astype(float)

# 提取A国和B国的总人口(从非空行中获取)
a_country_pop = df.loc[df['国家'] == 'A国', '国家人口'].values[0]
b_country_pop = df.loc[df['国家'] == 'B国', '国家人口'].values[0]

# 计算占比并保留两位小数
df['A类占比%'] = (df['A类城市人口'] / a_country_pop * 100).round(2)
df['B类占比%'] = (df['B类城市人口'] / b_country_pop * 100).round(2)

# 查看结果
print(df)
# 如需保存回Excel,取消下面注释
# df.to_excel("population_with_ratio.xlsx", index=False)

代码说明

  • 数据清理:原数据里的人口是带逗号的字符串(如100,000),必须转成数值才能做除法运算。
  • 提取国家人口:用loc精准定位到对应国家的行,直接取出总人口值,避免循环判断。
  • 矢量化运算:直接对整列进行计算,比逐行循环效率高数倍,逻辑也更直观。
  • 结果格式化:用round(2)保留两位小数,和你期望的输出格式完全匹配。

最终输出

运行代码后,原表格会新增A类占比%和B类占比%列,结果如下:

国家国家人口A类城市A类城市人口B类城市B类城市人口A类占比%B类占比%
A国100000.0C市20000.0G市10000.020.08.33
B国120000.0D市15000.0H市25000.015.020.83
NaNE市5000.0I市45000.05.037.5
NaNF市60000.0J市30000.060.025.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:42:43