如何基于特定后缀值对Pandas DataFrame的行进行排序?
按指定后缀规则对Pandas DataFrame排序的实现
问题背景
给定从CSV读取并设置索引后的DataFrame:
id,values 1001-MAC, 10 1034-WIN, 20 2001-WIN, 15 3001-MAC, 45 4001-LINUX, 12 4001-MAC, 67
读取代码:
import pandas as pd df = pd.read_csv('example.csv') df.set_index('id', inplace=True)
需求:按照后缀列表["WIN", "MAC", "LINUX"]的顺序,对DataFrame的行按id的后缀进行排序,最终输出如下:
id,values 1034-WIN, 20 2001-WIN, 15 1001-MAC, 10 3001-MAC, 45 4001-MAC, 67 4001-LINUX, 12
实现方案
核心步骤
- 提取后缀信息:从索引
id中拆分出后缀部分,生成临时排序依据列 - 绑定自定义排序规则:通过
pd.Categorical将后缀列转换为指定顺序的分类类型,强制排序逻辑遵循给定列表 - 执行排序并清理:基于分类列完成排序后,移除临时列以保留原数据结构
完整代码
import pandas as pd # 读取数据并设置索引 df = pd.read_csv('example.csv') df.set_index('id', inplace=True) # 指定后缀的排序优先级 suffix_order = ["WIN", "MAC", "LINUX"] # 从索引中提取后缀,生成临时列 df['suffix'] = df.index.str.split('-').str[-1] # 将后缀列转换为带指定顺序的分类类型 df['suffix'] = pd.Categorical(df['suffix'], categories=suffix_order, ordered=True) # 按后缀排序,随后移除临时列 sorted_df = df.sort_values('suffix').drop('suffix', axis=1) # 打印结果 print(sorted_df)
输出验证
运行代码后得到的结果与需求完全匹配:
values id 1034-WIN 20 2001-WIN 15 1001-MAC 10 3001-MAC 45 4001-MAC 67 4001-LINUX 12
内容的提问来源于stack exchange,提问作者holmessh
相关产品推荐
相关产品推荐

