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

Python pandas:转置现有DataFrame创建自定义格式DataFrame

实现方案

你要做的是宽表转长表+指标列透视,两步pandas操作就能得到预期结果,不需要复杂自定义逻辑。
你的原始数据结构如下:
原始数据集
原始表中Country(国家)、Indicator(指标)是固定维度列,其余列均为年份维度的数值列,转换分两步走:

  1. 第一步用melt把分散的年份列合并为单个Year列
import pandas as pd

# 固定国家、指标为id列,其余年份列打平
df_step1 = df.melt(
    id_vars=["Country", "Indicator"],
    var_name="Year",
    value_name="metric_value"
)

这一步输出的表结构为4列:Country/Indicator/Year/metric_value,每一行对应「某国家+某年+某指标」的单条数值。
2. 第二步用pivot把Indicator列的5个指标转为独立列

# 以国家、年份为行索引,把不同指标值展开为单独列
df_result = df_step1.pivot(
    index=["Country", "Year"],
    columns="Indicator",
    values="metric_value"
).reset_index()

# 清掉透视带来的列名层级,恢复普通二维表结构
df_result.columns.name = None

最终输出结构和你预期完全一致:
最终输出数据集

注意事项

  • 如果你的原始数据存在「同一国家+同一年份+同一指标」的重复条目,把pivot替换为pivot_table,指定聚合规则即可,例如pd.pivot_table(..., aggfunc="first")
  • 转换后行数校验:如果有N个国家、10个年份,最终输出行数固定为N*10,每个国家对应10条年份记录,和你要求的重复规则匹配。
  • 如果想简化写法,也可以直接用pd.wide_to_long完成第一步年份合并,逻辑和melt等价,适合列名规则高度统一的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:54:24