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

Python pandas sort_values多列排序如何分别指定自定义排序规则

解决方法

问题原因

你写的代码会对两列都生效绝对值转换,是因为sort_values的key参数默认会把传入的函数应用到by列表里的所有列,所以A列也被按绝对值排序,不符合需求。

正确代码

适用pandas 1.1.0及以上版本

直接在key函数里按列名区分处理逻辑即可:

df.sort_values(by=['A', 'B'], key=lambda x: x.abs() if x.name == 'B' else x)

低版本pandas兼容方案

如果你的pandas版本不支持key参数,可以通过临时列实现:

# 新增B列绝对值的临时列
df['b_abs'] = df['B'].abs()
# 按规则排序后删除临时列
df = df.sort_values(by=['A', 'b_abs']).drop('b_abs', axis=1)

如果你实际需求是先按B列绝对值升序、再按A列原始值升序,只要把by参数里的列顺序调换为['B', 'A']即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:27:01