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

Pandas 1.1.5如何按含不匹配值的自定义列表对DataFrame索引排序

pandas 1.1.5 按自定义列表对DataFrame索引排序实现

本方法完全适配pandas 1.1.5版本,可同时处理自定义排序列表不包含DataFrame全部索引、列表包含索引不存在的额外值两种场景。


实现方法1:索引筛选拼接法(逻辑直观,无需修改索引类型)

核心逻辑:先提取自定义列表中在当前DataFrame索引里存在的元素(保持列表原有顺序),再拼接DataFrame中不在排序列表里的剩余索引,最后用reindex方法重排即可。
完整代码示例:

import pandas as pd

# 构造示例数据
df = pd.DataFrame(
    {'Revenue': [1, 6, 0], 'Cost': [2, 3, 10]},
    index=['Firm AC', 'Firm B', 'Firm ZZ']
)
ordered_list = ['Firm AA', 'Firm ZZ', 'Firm C', 'Firm B']

# 1. 提取排序列表中存在于DataFrame索引的部分,保留原有排序
sorted_exist_idx = [idx for idx in ordered_list if idx in df.index]
# 2. 提取DataFrame中不在排序列表的剩余索引,如需对剩余索引按字母序排序可在外层加sorted()
remaining_idx = [idx for idx in df.index if idx not in ordered_list]
# 3. 重排DataFrame
df_sorted = df.reindex(sorted_exist_idx + remaining_idx)

实现方法2:分类索引排序法(代码更简洁)

核心逻辑:将DataFrame索引转为有序分类类型,分类顺序设置为自定义排序列表,不在分类列表中的索引会被标记为缺失值,排序时缺失值默认排在末尾。
完整代码示例:

import pandas as pd

# 构造示例数据同方法1
df = pd.DataFrame(
    {'Revenue': [1, 6, 0], 'Cost': [2, 3, 10]},
    index=['Firm AC', 'Firm B', 'Firm ZZ']
)
ordered_list = ['Firm AA', 'Firm ZZ', 'Firm C', 'Firm B']

# 将索引转为有序分类,按分类顺序排序
df.index = pd.Categorical(df.index, categories=ordered_list, ordered=True)
df_sorted = df.sort_index()

# 如后续不需要保留分类类型,可将索引转回字符串
# df_sorted.index = df_sorted.index.astype(str)

结果验证

两种方法得到的df_sorted都符合预期输出:

RevenueCost
Firm ZZ010
Firm B63
Firm AC12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:54:03