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

如何将pandas DataFrame从现有结构转换为目标结构

pandas DataFrame 宽表转目标结构实现方案

你需要的是把列名带「国家+指标」复合信息的宽表,转换为按维度规整的标准表,直接按下面的步骤操作即可:

  • 核心逻辑分两步:先把所有数值列打平为长表拆分出国家、指标维度,再把指标转回单独列。
  • 完整代码如下,把对应变量名替换成你自己的表名、列名就行:
import pandas as pd

# 1. 宽表转长表,id_vars里放所有不需要转置的公共维度列,比如年份、月份这类
df_long = df.melt(
    id_vars=["年份"], 
    var_name="country_metric", 
    value_name="value"
)

# 2. 拆分复合列名,拿到国家、具体指标两个字段,如果你的列名分隔符不是下划线就换成对应符号
df_long[["国家", "指标"]] = df_long["country_metric"].str.split("_", expand=True)

# 3. 把指标字段转回列,得到目标结构
df_result = df_long.pivot(
    index=["年份", "国家"], 
    columns="指标", 
    values="value"
).reset_index()

# 清理列名多余的索引标签
df_result.columns.name = None

注意事项:如果你的公共维度不止年份(比如还有季度、行业字段),直接把字段名加到id_vars和pivot的index参数列表里即可;如果转换后有空值,按业务需求用fillna()填充对应值就行。

可以用测试数据验证效果:

# 构造和原始结构一致的测试表
df = pd.DataFrame({
    "年份": [2020, 2021, 2022],
    "阿根廷_食品出口": [102, 124, 157],
    "阿根廷_能源出口": [83, 92, 116],
    "巴西_食品出口": [211, 235, 272],
    "巴西_能源出口": [154, 172, 209]
})

# 执行上述转换后输出的结果,每行对应一个年份+一个国家,食品出口、能源出口各自为独立列,和目标结构完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:09:21