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

如何将宽格式DataFrame转换为国家-年份-值的长格式?

Pandas实现宽格式DataFrame转长格式

可以用Pandas的melt()函数快速实现宽格式到长格式的转换,以下是具体步骤和代码:

1. 构造示例宽格式数据

先模拟你提供的多国家宽格式DataFrame:

import pandas as pd

# 示例宽格式数据,行是国家,列是年份
wide_df = pd.DataFrame(
    data={'Year1': ['x1', 'y1'], 'Year2': ['x2', 'y2'], 'Year3': ['x3', 'y3']},
    index=['canada.', 'usa.']  # 模拟带标点的国家名
)

2. 执行宽转长转换

# 把索引转为普通列,再用melt转换
long_df = wide_df.reset_index().melt(
    id_vars='index',          # 指定作为标识的列(原国家索引)
    var_name='Year',          # 原年份列名存入新列Year
    value_name='Value'        # 原数值存入新列Value
).rename(columns={'index': 'Country'})  # 重命名标识列为Country

# 处理国家名:去掉末尾标点并首字母大写
long_df['Country'] = long_df['Country'].str.strip('.').str.capitalize()

3. 转换结果

最终得到的long_df结构如下:

CountryYearValue
CanadaYear1x1
UsaYear1y1
CanadaYear2x2
UsaYear2y2
CanadaYear3x3
UsaYear3y3

关键函数说明

  • reset_index():将原DataFrame的索引(国家)转换为普通列,方便后续作为标识列处理
  • melt():Pandas专门用于宽转长的函数,id_vars指定保留的分组列,var_name和value_name分别定义转换后的列名
  • str.strip('.'):清理国家名中的多余标点,可根据实际情况调整符号
  • str.capitalize():将国家名格式化为首字母大写的形式,匹配示例要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:25:22