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

