如何将宽格式Pandas DataFrame转换为长格式?
Pandas 宽表转长表实现方案
问题描述
我有如下格式的Pandas DataFrame:
Year United Kingdom Canada 0 1880 0.13 0.00 1 1890 0.16 0.00 2 1900 0.29 0.00 3 1910 0.32 0.00 4 1920 0.56 0.01
需要转换为以下长表格式:
Year Country value 0 1880 United Kingdom 0.13 1 1890 United Kingdom 0.16 2 1900 United Kingdom 0.29 3 1910 United Kingdom 0.32 4 1920 United Kingdom 0.56 5 1880 Canada 0.00 6 1890 Canada 0.00 ...
尝试过transpose和reset_index但没找到正确方法,想问有没有简便方法,还是要创建全新DataFrame?
解决方案
用Pandas内置的melt()方法就能直接实现,不需要手动创建新DataFrame,这是处理宽表转长表的标准工具。
示例代码:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Year': [1880, 1890, 1900, 1910, 1920], 'United Kingdom': [0.13, 0.16, 0.29, 0.32, 0.56], 'Canada': [0.00, 0.00, 0.00, 0.00, 0.01] }) # 执行宽转长转换 melted_df = df.melt( id_vars=['Year'], # 保持结构不变的列 value_vars=['United Kingdom', 'Canada'], # 需要转换的列 var_name='Country', # 原列名转换后的新列名 value_name='value' # 原数值转换后的新列名 ) print(melted_df)
执行后输出结果完全符合需求格式。
内容的提问来源于stack exchange,提问作者Guilherme
相关产品推荐
相关产品推荐

