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

如何用Python按指定规则排序CSV:先按第一列分隔后缀再按前缀

Pandas实现按字段拆分后多条件排序

问题背景

假设有如下CSV数据:

Field1,Field2,Field3,Field4
bitter-banana,yellow,1,10
tasty-banana,green,1,7
bad-banana,yellow,2,11
tasty-apple,green,10,5
bad-apple,red,9,4
bitter-apple,green,1,7

排序需求:仅基于Field1列排序,规则为:

  • 先按-分隔符后的字符串部分按字母序排序
  • 后缀相同的组内,再按-分隔符前的字符串部分按字母序排序

期望输出:

Field1,Field2,Field3,Field4
bad-apple,red,9,4
bitter-apple,green,1,7
tasty-apple,green,10,5
bad-banana,yellow,2,11
bitter-banana,yellow,1,10
tasty-banana,green,1,7

已实现第一步排序的代码:

df = df.sort_values(by=["Field1"], key=lambda x: x.str.split("-").str[1], ascending=True)

需补充实现第二步排序逻辑。

解决方案

可以通过构建多排序键的方式完成需求,以下两种方法都能实现:

方法1:拆分字段后按多列排序

先将Field1拆分为前缀、后缀两个临时列,再按这两个列的顺序排序,最后可删除临时列:

# 拆分Field1为前缀和后缀列
df[['prefix', 'suffix']] = df['Field1'].str.split('-', expand=True)
# 先按后缀排序,再按前缀排序
df = df.sort_values(by=['suffix', 'prefix'], ascending=True)
# 移除临时列(可选操作)
df = df.drop(['prefix', 'suffix'], axis=1)

方法2:直接在key中返回多元素元组

无需创建临时列,直接在key函数中返回包含后缀、前缀的元组,Pandas会按元组内的顺序依次排序:

df = df.sort_values(
    by=["Field1"],
    key=lambda x: x.str.split("-").apply(lambda y: (y[1], y[0])),
    ascending=True
)

第二种方法更简洁,无需额外处理临时列,推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:10:36