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

如何对多级索引的Pandas DataFrame按两级不同规则排序?

实现多级索引DataFrame的自定义排序需求

数据构造

首先是构造目标多级索引DataFrame的代码:

import pandas as pd

df2 = pd.DataFrame({
    "word" : ["AA", "AC", "AC", "BA", "BB", "BB", "BB"],
    "letter1": ["A", "A", "A", "B", "B", "B", "B"],
    "letter2": ["A", "C", "C", "A", "B", "B", "B"]
})
df_counts = df2[["word", "letter1", "letter2"]].groupby(["letter1", "letter2"]).count()

需求描述

需要完成两层排序逻辑:

  • 外层按letter1分组的总数据量降序排列(letter1=B的组共4条数据,需排在letter1=A组之前)
  • 内层在每个letter1分组内,按word列的计数值降序排列

期望输出结果:

word
letter1 letter2 
      B       B     3
              A     1
      A       C     2
              A     1

实现方法

可以实现,具体步骤如下:

  1. 计算每个letter1分组的总记录数,添加为辅助列;
  2. 基于辅助列和原word列的计数值进行多级排序;
  3. 移除辅助列,得到最终结果。

对应代码:

# 计算每个letter1分组的总数,合并到原DataFrame
df_counts = df_counts.join(
    df_counts.groupby(level='letter1').sum().rename(columns={'word': 'group_total'})
)

# 先按分组总数降序,再按word计数值降序排序,最后删除辅助列
df_counts = df_counts.sort_values(
    by=['group_total', 'word'], ascending=False
).drop(columns='group_total')

# 确保层级索引顺序正确(可选,原索引层级已正确时可省略)
df_counts = df_counts.reorder_levels(['letter1', 'letter2'])

执行上述代码后,即可得到符合预期的排序结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:29