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

如何在MultiIndex DataFrame排序时为不同层级指定对应key函数?

为MultiIndex不同层级分别指定排序Key函数

当需要对MultiIndex类型的DataFrame的不同层级应用不同的排序转换函数时,只需给sort_index()方法的key参数传入与level参数列表长度匹配的函数列表,列表中每个函数对应level里对应位置的层级。

完整示例代码

import pandas as pd
import numpy as np
np.random.seed(3)

# 创建MultiIndex DataFrame
choice = lambda a, n: np.random.choice(a, n, replace=True)
df_multi = pd.DataFrame({
    'one': pd.Series(choice(['a', 'B', 'c'], 8)),
    'two': pd.Series(choice([1, -2, 3], 8)),
    'A': pd.Series(choice([2,6,9,7] ,8))
})
df_multi = df_multi.set_index(['one', 'two'])

# 定义各层级的排序转换函数
func_1 = lambda s: s.str.lower()  # 对'one'层级转小写后排序
func_2 = lambda x: np.abs(x)      # 对'two'层级取绝对值后排序

# 为不同层级分别指定key函数排序
m_sorted = df_multi.sort_index(
    level=['one', 'two'],
    key=[func_1, func_2]
)

# 验证排序结果
print(m_sorted.index)

效果说明

  • level=['one', 'two']指定排序优先级:先按'one'层级排序,再按'two'层级排序
  • key=[func_1, func_2]对应分配函数:给'one'层级应用func_1(转小写后比较),给'two'层级应用func_2(取绝对值后比较)
  • 最终排序后的索引会先按'one'的小写字母顺序排列,再按'two'的绝对值大小排列

注意:该特性要求pandas版本≥1.4.0,此版本开始支持key参数传入函数列表对应MultiIndex的多层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:17:47