如何使用Python将宽表DataFrame转换为长表格式?
将宽表DataFrame转换为长表的Python实现
在Python中,使用pandas库的melt()函数可以轻松完成宽表到长表的格式转换,这是处理这类数据重塑需求的标准方法。
步骤1:构造初始宽表(或读取已有数据)
先还原你提供的初始宽表数据:
import pandas as pd df_wide = pd.DataFrame({ 'City': ['City_1', 'City_2', 'City_3'], '2000': [10, 15, 20], '2005': [11, 14, 30], '2010': [12, 13, 25], '2015': [13, 12, 35] })
步骤2:使用melt()转换为长表
调用melt()函数并指定关键参数即可完成转换:
df_long = df_wide.melt( id_vars=['City'], # 保留不变的标识列 var_name='Year', # 原年份列名对应的新列名称 value_name='Population' # 原人口数值对应的新列名称 ) # 可选:将Year列从字符串转为整数类型(如需数值运算) df_long['Year'] = df_long['Year'].astype(int)
参数说明
id_vars:设置不需要被“融化”的列,这里City作为每个记录的标识,会重复对应每一条年份-人口数据。var_name:定义从原宽表列名(2000、2005等)转换而来的新列名称,对应长表中的Year列。value_name:定义从原宽表各列数值转换而来的新列名称,对应长表中的Population列。
转换后的长表结果
执行上述代码后,df_long的结构与你需求的完全一致:
| City | Year | Population |
|---|---|---|
| City_1 | 2000 | 10 |
| City_1 | 2005 | 11 |
| City_1 | 2010 | 12 |
| City_1 | 2015 | 13 |
| City_2 | 2000 | 15 |
| City_2 | 2005 | 14 |
| City_2 | 2010 | 13 |
| City_2 | 2015 | 12 |
| City_3 | 2000 | 20 |
| City_3 | 2005 | 30 |
| City_3 | 2010 | 25 |
| City_3 | 2015 | 35 |
内容的提问来源于stack exchange,提问作者Corger
相关产品推荐
相关产品推荐

