实际上,如果您查看pandas DataFrame 的源代码,您会发现sort()只是具有不同参数的sort_index()包装器,并且正如@Jeff 在这个问题中所说,sort_index()是首选方法利用。
如果您仅按一列排序,则sort_index() 方法使用numpy.argsort()和 default 。kind=quicksort
而且quicksort()不稳定,这就是为什么你的索引看起来被打乱了。
但是您可以将kind
参数传递给 sort_index()(其中之一'mergesort'
,, 'quicksort'
, ),因此您可以为您的任务'heapsort'
使用稳定的排序( ):'mergesort'
>>> mydf.sort_index(by=['stars'], ascending=False, kind='mergesort')
stars
17 5
11 5
6 5
1 5
19 4
18 4
15 4
14 4
7 4
5 4
2 4
10 3
8 3
4 3
16 2
12 2
9 2
3 2
13 1
0 1
sort_index() 如果by
参数中有超过一列,也使用合并排序(或计数排序),这很有趣,例如,您可以这样做:
>>> mydf.sort_index(by=['stars', 'stars'], ascending=False)
stars
1 5
6 5
11 5
17 5
2 4
5 4
7 4
14 4
15 4
18 4
19 4
4 3
8 3
10 3
3 2
9 2
12 2
16 2
0 1
13 1
现在排序是稳定的,但是索引是升序排序的