如何调整pandas DataFrame多级索引顺序:将C D M改为C M D
调整Pandas DataFrame多级索引层级顺序的简便方法
嗨,我懂你想把多级索引每个层级的标签顺序从默认字母序的C D M改成C M D的需求,之前试pd.reindex没找到简便路子?别着急,这里有个更直接的方案,我给你拆解下:
情况1:索引是分类类型(CategoricalIndex)
如果你的多级索引各层级已经是分类类型,那直接修改分类顺序就能搞定,一步到位:
new_order = ['C', 'M', 'D'] # 遍历每个索引层级,重新设置分类的顺序(确保有序) for level in range(df.index.nlevels): df.index = df.index.set_levels( pd.CategoricalIndex(new_order, ordered=True), level=level ) # 最后调用sort_index让索引按新顺序排列 df = df.sort_index()
情况2:索引是普通非分类类型
如果是普通索引,我们可以先生成符合目标顺序的多级索引模板,再用reindex对齐数据,操作也很简单:
new_order = ['C', 'M', 'D'] # 生成目标的多级索引(笛卡尔积形式,和原索引结构匹配) target_index = pd.MultiIndex.from_product( [new_order]*df.index.nlevels, names=df.index.names ) # 重新对齐数据 df = df.reindex(target_index)
给你举个完整的示例,方便你测试:
import pandas as pd # 创建初始的多级索引DataFrame sample_data = {'value': list(range(1, 10))} original_index = pd.MultiIndex.from_product( [['C','D','M'], ['C','D','M']], names=['level0', 'level1'] ) df = pd.DataFrame(sample_data, index=original_index) # 用情况2的方法调整索引顺序 new_order = ['C', 'M', 'D'] target_index = pd.MultiIndex.from_product([new_order, new_order], names=df.index.names) df = df.reindex(target_index) print(df.index)
运行后你会看到索引的每个层级都变成了C M D的顺序,完美符合你的需求~
内容的提问来源于stack exchange,提问作者user3821012
相关产品推荐
相关产品推荐

