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

DataFrame字母数字混合列按数字优先字母次之排序方法咨询

解决方案

核心逻辑是拆分字符串中的数字段和字母段,将数字段转为整数避免字符串排序错位,再按「数字→字母」的优先级排序即可。
假设待排序列名为code,以下是两种常用实现方式:

方法1:使用sort_values的key参数(Pandas 1.1.0+ 适用)

直接通过key参数指定排序规则,无需新增临时列:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({'code': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']})

df_sorted = df.sort_values(
    by='code',
    key=lambda x: [
        x.str.extract(r'(\d+)', expand=False).astype(int), # 优先按数字部分排序
        x.str.extract(r'([A-Za-z]+)', expand=False) # 数字相同再按字母部分排序
    ]
)

方法2:新增临时列排序(低版本Pandas适用)

如果你的Pandas版本不支持key参数,可以先拆分出两个排序字段,排序后删除即可:

# 拆分排序字段
df['num'] = df['code'].str.extract(r'(\d+)', expand=False).astype(int)
df['letter'] = df['code'].str.extract(r'([A-Za-z]+)', expand=False)

# 排序后删除临时字段
df_sorted = df.sort_values(by=['num', 'letter']).drop(columns=['num', 'letter'])

以上正则适配多字母、多数字的场景,比如AB12、C3这类格式也能正常拆分排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:18:01