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

如何基于特定后缀值对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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:50:50