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

如何批量将Pandas DataFrame中同一国家的多行数据转换为单列并合并为宽表

批量将多国家多行人口数据转换为宽格式(单列对应单个国家)

我完全理解你现在的困扰——手动为数百个国家重复写转换代码效率太低了!其实借助pandas的数据重塑功能,我们可以用几行代码实现批量转换,完美替代你手动处理单个国家的流程。

解决方案核心思路

你的需求本质是把「长格式(long format)」数据转换成「宽格式(wide format)」:每个国家作为单独的一列,年份作为行标识,对应位置填充该国家当年的人口数据。Pandas的pivot()或pivot_table()函数正好能搞定这个需求。

完整批量处理代码

import pandas as pd

# 读取原始数据
url = 'https://raw.githubusercontent.com/gambler2020/Data_Analysis/master/population/population.csv'
df = pd.read_csv(url)

# 核心:用pivot批量转换为宽格式
# index指定行标识(年份),columns指定列标识(国家),values指定填充的数值(人口)
wide_df = df.pivot(
    index='Year',
    columns='Entity',
    values='Population (historical estimates)'
).reset_index()

# 查看结果
wide_df.head()

代码解释

  1. pivot()函数:自动将每个Entity(国家)转换为单独的列,每行对应一个Year,单元格填充对应国家的人口数据,完全替代了你手动提取单个国家、重命名列、合并数据的流程。
  2. reset_index():把Year从索引变回普通列,和你手动处理后得到的dff结构完全一致。

处理特殊情况:重复数据

如果你的数据集中存在同一个国家同一年有多个人口数据的情况(比如重复记录),可以用pivot_table()并指定聚合函数来处理:

# 例如对重复的年份-国家组合取平均值,也可以用'sum'等其他聚合函数
wide_df = df.pivot_table(
    index='Year',
    columns='Entity',
    values='Population (historical estimates)',
    aggfunc='mean'
).reset_index()

这个方法一次性处理所有国家,不管有几百个还是几千个,效率比手动处理高几个数量级,而且代码简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:52:27