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

如何在Pandas多级索引DataFrame的各层级内按值排序?

Pandas多级索引DataFrame按一级索引分组内排序

环境

  • Python 3.11.2
  • Pandas 1.5.3

问题场景

有一个带pd.MultiIndex的DataFrame,需要在每个一级索引分组内按Feat_1列的值排序,而非对整个DataFrame做全局排序。示例数据如下:

import pandas as pd

pf = pd.DataFrame({'Feat_1': {('A', 'aa'): 50,
  ('A', 'ab'): 85, ('A', 'ac'): 44, ('B', 'ba'): 31, ('B', 'bb'): 17,
  ('B', 'bc'): 32, ('C', 'ca'): 75, ('C', 'cb'): 33, ('C', 'cc'): 63},})

直接执行pf.sort_values('Feat_1')会打乱一级索引的分组结构,所有行按Feat_1全局排序,不符合分组内排序的需求。

解决方案

方法1:分组后应用排序

通过groupby按一级索引(level=0)分组,对每个分组单独执行排序,同时保留原多级索引结构:

sorted_pf = pf.groupby(level=0, group_keys=False).apply(lambda x: x.sort_values('Feat_1'))

方法2:重置索引后排序(性能更优)

先将多级索引转为普通列,排序完成后再恢复多级索引,这种写法在数据量大时性能更好:

sorted_pf = pf.reset_index().sort_values(['level_0', 'Feat_1']).set_index(['level_0', 'level_1'])

最终结果

执行上述任意一种方法后,都会得到符合需求的分组内排序结果:

Feat_1
A   ac  44
    aa  50
    ab  85
B   bb  17
    ba  31
    bc  32
C   cb  33
    cc  63
    ca  75

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:10:08