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

