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

Pandas多级索引非0层级.loc切片保持指定顺序的实现

解决Pandas多级索引非0层级切片后保持指定顺序的问题

核心思路是先构建符合目标顺序的完整索引元组列表,再通过loc或reindex获取结果,避免切换层级带来的冗余操作。

解决方案代码

import pandas as pd

# 创建多级索引DataFrame
index = [('a',1), ('b',2), ('c', 3)]
index = pd.MultiIndex.from_tuples(index, names = ['letters', 'numbers'])
df = pd.DataFrame(index  = index, data = ['cat', 'dog', 'bird'],
                 columns = ['animal'])

# 目标numbers层级的顺序列表
lst_2 = [3, 2, 1]

# 构建符合目标顺序的完整索引元组列表
# 方式1:遍历目标列表,匹配对应索引
target_index = [idx for num in lst_2 for idx in df.index if idx[1] == num]

# 方式2:构建映射字典(更高效,适合大数据集)
num_to_idx = {idx[1]: idx for idx in df.index}
target_index = [num_to_idx[num] for num in lst_2]

# 获取结果
df3 = df.loc[target_index]
# 或使用reindex:df3 = df.reindex(target_index)

运行结果

animal
letters numbers       
c       3         bird
b       2          dog
a       1          cat

原理说明

  • 当使用df.loc(axis=0)[:, lst_2]时,Pandas会保留原索引的排序逻辑,仅筛选出numbers层级匹配的行,不会按lst_2的顺序重新排列。
  • 直接传入完整的索引元组列表给loc或reindex时,Pandas会严格按照列表的顺序返回对应行,完美匹配需求。
  • 两种构建target_index的方式中,映射字典的方法时间复杂度更低,适合处理大型DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:03:01