为何Pandas DataFrame使用sort_values按多列排序时二级排序未生效?
关于Pandas sort_values二级排序不生效的问题
不是你的理解有误,问题出在你的DataFrame中列b的所有值都是唯一的,二级排序(按a列)没有触发的前提条件。
具体分析
先看你的原始数据:
import pandas as pd my_newobj = pd.DataFrame({'b': [4, 7, -3, 2], 'a': [0, 4, 7, 1]})
b列的取值是[4,7,-3,2],每个值仅出现一次,没有重复项。当调用sort_values(by=['b', 'a'])时:
- Pandas会先按b列进行主排序,由于b列没有重复值,每一行的最终位置已经完全由b列的顺序决定;
- 二级排序(按a列)只有在主排序列存在重复值时才会生效——用来给主排序结果中b值相同的行进一步区分顺序。你的数据里没有这种场景,所以a列的排序逻辑没机会体现。
验证二级排序效果的示例
修改数据让b列出现重复值,就能看到二级排序的作用:
# 构造b列有重复值的DataFrame my_newobj = pd.DataFrame({'b': [4, 4, -3, 2], 'a': [0, 4, 7, 1]}) # 执行排序 print(my_newobj.sort_values(by=['b', 'a']))
输出结果:
b a 2 -3 7 3 2 1 0 4 0 1 4 4
这里b=4的两行,会按a列的升序(0→4)排列,这就是二级排序的实际效果。
内容的提问来源于stack exchange,提问作者meKafka
相关产品推荐
相关产品推荐

