如何转换Python DataFrame,将行列标题合并为新列名并重构表格?
处理DataFrame结构重构方案
假设你提取到的第6个DataFrame(记为df6)原始结构如下:
| Unnamed: 0 | MC | TNG | DCR | |
|---|---|---|---|---|
| 0 | GROUP | MC | TNG | DCR |
| 1 | GAS | 10 | 20 | 30 |
| 2 | HYDRO | 15 | 25 | 35 |
| 3 | SOLAR | 5 | 15 | 25 |
想要得到的目标结构是:
| GAS_MC | GAS_TNG | GAS_DCR | HYDRO_MC | HYDRO_TNG | HYDRO_DCR | SOLAR_MC | SOLAR_TNG | SOLAR_DCR |
|---|---|---|---|---|---|---|---|---|
| 10 | 20 | 30 | 15 | 25 | 35 | 5 | 15 | 25 |
实现步骤及代码
- 清理冗余行:删除
GROUP所在的行(索引0)
df6_cleaned = df6.drop(index=0)
- 设置能源类型为索引:将首列(通常是
Unnamed: 0)设为索引,并命名为energy_type,方便后续组合列名
# 定位首列并设为索引 df6_cleaned = df6_cleaned.set_index(df6_cleaned.columns[0]) df6_cleaned.index.name = "energy_type"
- 重塑表格结构:通过「长表转宽表」的方式,把能源类型和分组组合成新列名
# 先转成长格式,拆分出能源类型、分组和对应值 df_melted = df6_cleaned.reset_index().melt( id_vars="energy_type", var_name="group", value_name="value" ) # 组合生成新列名 df_melted["new_column"] = df_melted["energy_type"] + "_" + df_melted["group"] # 转回宽格式,得到目标结构 df_final = df_melted.pivot(columns="new_column", values="value").reset_index(drop=True) # 可选:将值转为数值类型(如果提取的是字符串) df_final = df_final.apply(pd.to_numeric, errors="coerce")
补充说明
- 如果你的原始DataFrame列名不是
Unnamed: 0,直接替换成实际列名即可 - 若
GROUP行的索引不是0,根据实际情况调整drop(index=...)的参数 - 要是需要保留多组数据(比如多行值),可以保留
index参数在pivot中,避免值被覆盖
内容的提问来源于stack exchange,提问作者user20275872
相关产品推荐
相关产品推荐

