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
相关产品推荐
相关产品推荐

