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

如何按DataFrame多索引层级idx_0与value_1列降序排序?

解决按索引层级与列组合排序的问题

嘿,很高兴能帮你搞定这个排序需求!既然pandas 0.23.0及以上版本已经支持索引层级与列的组合排序,那我们直接用这个特性来实现你要的效果就好。

实现步骤

你的核心需求是:按索引层级idx_0(层级0)降序,再按value_1列降序排序,最终让MyName列竖读为SCOTTBOSTON。下面是具体的代码实现:

1. 完整创建测试DataFrame

先补全MyName列的初始值,确保排序后能得到目标结果:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'idx_0': [2]*6 + [1]*5,
    'idx_1': [6,4,2,10,18,5,11,1,7,9,3],
    'value_1': np.arange(11,0,-1),
    'MyName': ['S','C','O','T','T','B','O','S','T','O','N']
})

2. 将idx_0设置为索引层级0

根据你的描述,idx_0是索引的层级0,所以先把它转为索引:

# 将idx_0设置为单级索引(如果是多级索引,只需调整set_index的参数即可)
df = df.set_index('idx_0')

3. 组合排序(索引层级+列)

利用pandas 0.23.0+的新特性,我们可以直接用sort_values()同时指定索引层级和列进行排序。这里我们需要先按idx_0降序,再按value_1降序,有两种简洁的实现方式:

方式一:使用sort_values结合level参数
# 按索引层级idx_0降序,value_1列降序排序
df_sorted = df.sort_values(by='value_1', level='idx_0', ascending=[False, False])
方式二:稳定排序实现分组排序

如果担心排序顺序的稳定性,也可以用稳定排序先按索引层级分组,再在组内按列排序:

# 先按idx_0降序排序(稳定排序),再在每个组内按value_1降序排序
df_sorted = df.sort_index(level='idx_0', ascending=False).sort_values(by='value_1', ascending=False, kind='mergesort')

4. 验证结果

排序后查看MyName列,竖读就是SCOTTBOSTON:

print(df_sorted['MyName'].tolist())
# 输出: ['S', 'C', 'O', 'T', 'T', 'B', 'O', 'S', 'T', 'O', 'N']

额外说明

如果你是误将idx_0描述为“索引层级”,实际它只是普通列,那直接按列排序更简单:

df_sorted = df.sort_values(by=['idx_0', 'value_1'], ascending=[False, False])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:26