You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定列的值对MultiIndex多层索引进行排序

多级索引DataFrame排序解决方案

要实现你需要的排序逻辑,分两步处理即可:先按level-0索引对应的Value总和降序确定其优先级,再在每个level-0组内按Value降序排列level-1索引。

实现代码

import pandas as pd

# 构建初始DataFrame
df = pd.DataFrame()
df["Index1"] = ["A", "A", "B", "B", "C", "C"]
df["Index2"] = ["X", "Y", "X", "Y", "X", "Y"]
df["Value"] = [1, 4, 7, 3, 2, 7]
df = df.set_index(["Index1", "Index2"])

# 计算每个level-0索引的Value总和,生成排序映射
group_sum = df.groupby(level=0)["Value"].sum().sort_values(ascending=False)
# 添加临时排序键,完成两级排序后删除临时列
df_sorted = df.assign(
    level0_order=df.index.get_level_values(0).map(group_sum)
).sort_values(by=["level0_order", "Value"], ascending=[False, False]).drop(columns="level0_order")

print(df_sorted)

输出结果

Value
Index1 Index2       
B      X            7
       Y            3
C      Y            7
       X            2
A      Y            4
       X            1

逻辑说明

  • 用groupby(level=0)统计每个Index1对应的Value总和,降序排序后得到level-0的优先级:B(总和10)> C(总和9)> A(总和5)。
  • 通过assign添加临时列level0_order,将每个Index1映射为对应的总和值,以此作为level-0的排序依据。
  • 最后通过sort_values先按level0_order降序确定level-0顺序,再按Value降序确定组内level-1顺序,最后移除临时列得到目标结果。

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:05:27