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

如何在Pandas多级索引DataFrame中使用Natsort进行排序?

解决Pandas多级索引按自然排序quarter的问题

你的报错是因为Pandas 1.1.5版本的sort_index不支持对MultiIndex使用key参数,该版本中MultiIndex的isna方法未实现,导致调用natsort_keygen()时触发错误。以下是两种适配你版本的解决方案:

方案一:提取quarter数字排序(无需natsort)

直接从quarter中提取数字部分转为整数,以此作为排序依据,无需依赖第三方库:

# 将多级索引转为普通列
df_reset = df.reset_index()
# 提取quarter中的数字并转为整数
df_reset['q_num'] = df_reset['quarter'].str.extract(r'Q(\d+)').astype(int)
# 按date、code、q_num排序后还原索引
df_sorted = df_reset.sort_values(by=['date', 'code', 'q_num']) \
                    .drop('q_num', axis=1) \
                    .set_index(['date', 'code', 'quarter'])

方案二:用natsort生成排序索引

如果你更倾向于使用natsort的自然排序逻辑,可以通过生成排序索引来实现:

from natsort import index_humane

# 转为普通列
df_reset = df.reset_index()
# 生成quarter的自然排序位置索引
sort_pos = index_humane(df_reset['quarter'])
# 按date、code和排序位置排序后还原索引
df_sorted = df_reset.iloc[sort_pos] \
                    .sort_values(by=['date', 'code']) \
                    .set_index(['date', 'code', 'quarter'])

两种方案都能实现Q1→Q2→…→Q9→Q10→Q11→Q12的自然排序,且适配你当前的Pandas 1.1.5版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:24:22