如何用Python Pandas的pivot将表格转换为国家名称、年份、值的结构
Pandas 转换表格为「国家名称-年份-对应数值」结构
根据你的表格结构(第一列为国家名称,后续各列为年份,单元格为对应年份的数值),以下是具体实现方法:
方法1:最简便的方式(使用melt)
虽然你问的是pivot,但宽表转长表最直接的工具是melt,代码如下:
import pandas as pd # 假设你的原始数据框是df,国家列名为"国家名称" df_long = df.melt( id_vars=["国家名称"], # 保留作为标识的列 var_name="年份", # 新生成的年份列的名称 value_name="对应年份数值" # 新生成的数值列的名称 )
方法2:用pivot相关逻辑实现(反向重塑)
如果一定要贴合pivot的思路,可通过堆叠列索引再调整结构实现:
# 1. 将年份列转为行索引层级,得到多索引的Series stacked = df.set_index("国家名称").stack() # 2. 重置索引,将多索引转为普通列 df_long = stacked.reset_index() # 3. 重命名列名匹配需求 df_long.columns = ["国家名称", "年份", "对应年份数值"]
补充说明
- 若原始表格的年份列是字符串类型,可通过
df_long["年份"] = df_long["年份"].astype(int)转为数值类型。 - 转换后若存在缺失值,可使用
df_long.dropna()删除或df_long.fillna()填充。
内容的提问来源于stack exchange,提问作者Monica
相关产品推荐
相关产品推荐

