Python中如何调整MultiIndex多层索引DataFrame的行顺序?
多层索引DataFrame指定行排序实现方法
针对无法预先修改原有DataFrame结构,仅调整MultiIndex行顺序的需求,直接使用reindex方法即可实现,不需要改动原数据结构。
核心操作逻辑如下:
- 构造你需要的目标顺序MultiIndex对象
- 调用原DataFrame的
reindex方法传入目标索引,得到排序后的新对象
对应示例的实现代码
import pandas as pd # 示例原数据构造 index1 = [("x","1"), ("x","3"), ("x","5"), ("y","1"), ("y","3")] data = pd.DataFrame(index = pd.MultiIndex.from_tuples(index1), columns = ["A","B"]) data.loc[("x","sum"),:] = [19,10] # 构造目标顺序的MultiIndex index2 = [("x","1"), ("x","3"), ("x","5"), ("x","sum"), ("y","1"), ("y","3")] target_index = pd.MultiIndex.from_tuples(index2) # 重排得到目标格式DataFrame data_sorted = data.reindex(target_index)
灵活批量排序方案
如果不想手动枚举所有索引元组,可以指定每一层的排序规则自动构造目标索引:
# 分别指定一级、二级索引的排序规则 level1_order = ["x", "y"] level2_order = ["1", "3", "5", "sum"] # 自动生成目标索引,自动过滤原数据中不存在的索引组合 target_index = pd.MultiIndex.from_product([level1_order, level2_order]).intersection(data.index) data_sorted = data.reindex(target_index)
说明
- 该方法不会修改原DataFrame的任何结构和数据,仅返回新的排序后对象
- 若目标索引包含原数据不存在的行,默认会返回空值行,可通过
reindex的fill_value参数自定义填充值,或提前用intersection方法取索引交集过滤不存在的项
内容的提问来源于stack exchange,提问作者Manuel K
相关产品推荐
相关产品推荐

