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

如何使用Pandas将指定范围的重复列转置为行

宽表转长表(复合列名拆分)解决方案

问题背景

现有如下结构的宽表:

Monthpower artunitenergy_1 (2018)energy_2 (2018)energy_3 (2018)energy_4 (2018)energy_1 (2019)energy_2 (2019)energy_3 (2019)energy_4 (2019)
JanNumber of power feeding systemsNumber100100100100102102102102
Jannet rated powerMW100100100100102102102102
Janpower feedKwH100100100100102102102102
FebNumber of power feeding systemsNumber100100100100102102102102
Febnet rated powerMW100100100100102102102102
Febpower feedKwH100100100100102102102102

需要转换为包含Month、power art、unit、Energy art、Value、Year的长表格式。

解决步骤

使用pandas的melt方法将宽表转长表,再通过正则表达式拆分复合列名,具体代码如下:

import pandas as pd

# 假设df为读取后的原数据DataFrame
# 1. 执行melt,将所有energy列转为行
melted_df = pd.melt(
    df,
    id_vars=['Month', 'power art', 'unit'],  # 保留不变的标识列
    var_name='Energy_Year',  # 存储原复合列名的临时列
    value_name='Value'       # 存储对应数值的列
)

# 2. 拆分复合列名,提取Energy art和Year
# 用正则匹配"energy_x (年份)"格式的字符串
melted_df[['Energy art', 'Year']] = melted_df['Energy_Year'].str.extract(r'(energy_\d+) \((\d+)\)')

# 3. 调整列顺序至目标格式,删除临时列
final_df = melted_df[['Month', 'power art', 'unit', 'Energy art', 'Value', 'Year']]

# 查看转换结果
print(final_df)

代码说明

  • pd.melt:将宽表中所有以energy_开头的列转为行,保留Month、power art、unit作为固定标识列。
  • 正则拆分:通过str.extract从复合列名中精准提取出Energy art(如energy_1)和Year(如2018)两个字段。
  • 列顺序调整:重新排列列的顺序,完全匹配目标输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:15:33