如何递归熔铸多列Pandas宽表并将列名转为索引
解决方案:将GIS索引的宽DataFrame转为复合索引长表
使用pandas内置的melt()方法即可实现通用的宽表转长表操作,无需手动指定所有列名,完美适配任意数量的列:
步骤说明与代码实现
- 重置索引:先把作为索引的
GIS转回普通列,方便后续熔铸操作 - 执行熔铸:用
melt()自动识别所有非标识列,转为Variable(原列名)和Value(对应值)两列 - 设置复合索引:将
GIS和Variable设为最终的复合索引
import pandas as pd # 构造示例输入(与你的输入一致) df = pd.DataFrame({ "GIS": [1, 2, 3], "X0": [100, 200, 300], "X1": [50, 51, 52], "X2": [71, 72, 73], "Xn": [100, 150, 210] }) df = df.set_index(["GIS"]) # 核心转换代码 df_reset = df.reset_index() melted_df = df_reset.melt(id_vars="GIS", var_name="Variable", value_name="Value") new_df = melted_df.set_index(["GIS", "Variable"])
效果验证
执行上述代码后,new_df的结构与你给出的期望输出完全一致:
Value GIS Variable 1 X0 100 X1 50 X2 71 Xn 100 2 X0 200 X1 51 X2 72 Xn 150 3 X0 300 X1 52 X2 73 Xn 210
内容的提问来源于stack exchange,提问作者DP-WA
相关产品推荐
相关产品推荐

