Pandas如何将DataFrame多列转换为MultiIndex多层索引?
实现方案
最简单的方式是直接使用pandas原生的stack()接口实现,不需要手动构造多层索引的元组列表,核心转换逻辑仅需一行链式调用即可,输出结果和目标结构完全匹配:
import pandas as pd # 构造原始示例DataFrame origin_df = pd.DataFrame(data={"a": [1,2], "b": [3,4], "c": [5,6]}, index=[0,1]) # 转换为目标结构 target_df = origin_df.stack()\ .swaplevel()\ .rename_axis(["var", "id"])\ .rename("foo")\ .sort_index()\ .to_frame()
逻辑说明
stack():将原始宽表的列转换为行索引的最内层,此时返回值为Series,外层索引是原表的行标记0、1,内层索引是原表的列名a、b、cswaplevel():交换两层行索引的顺序,将原列名对应的层放到外层,原行标记对应的层放到内层rename_axis(["var", "id"]):按从外到内的顺序给两层索引命名rename("foo"):给值列设置名称,对应目标表的foo列sort_index():按多层索引排序,保证同一var下的id按0、1顺序排列,和目标表的展示顺序完全一致to_frame():将单值Series转换为单列DataFrame结构
对比手动构造MultiIndex、用
melt再重设索引的方案,这种写法完全依托pandas原生的长宽表转换逻辑,代码更简洁,运行性能也更好,不会出现索引和值匹配错位的问题。
内容的提问来源于stack exchange,提问作者user344577
相关产品推荐
相关产品推荐

