Pandas 0.12.0
在下面的DataFrame中,为什么例如它混杂了索引?看看4,索引从1,15,6,7开始。大熊猫用什么来决定如何订购,我会怀疑索引是否保持连续的等值。
mydf=pd.DataFrame(np.random.randint(1, 6, 20),columns=["stars"])
mydf.sort(['stars'], ascending=False)
stars
19 5
14 5
1 4
15 4
6 4
7 4
4 3
12 3
18 3
8 2
2 2
9 2
10 2
11 2
13 2
16 2
5 1
3 1
17 1
0 1
答案 0 :(得分:6)
实际上,如果您查看source code of pandas DataFrame,您会发现sort()只是sort_index()的包装器,具有不同的参数,并且正如@Jeff所述{{3} },this question是首选使用的方法。
如果您只按一列排序,则使用sort_index()并使用默认kind=quicksort
的sort_index()方法。 numpy.argsort()不是quicksort(),这就是您的索引看起来混乱的原因。
但是您可以将kind
参数传递给sort_index()('mergesort'
,'quicksort'
,'heapsort'
之一),这样您就可以使用稳定排序({{1} })为你的任务:
'mergesort'
sort_index()也使用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
参数中有一列更多,这很有趣,例如,你可以这样做:
by
现在排序稳定,但索引按升序排序
答案 1 :(得分:4)
熊猫正在使用numpy的quicksort。 Quicksort涉及交换项目的位置。它一旦处于请求的顺序就会停止(在这种情况下,不涉及检查索引,因为您没有要求检查该列)。 Quicksort比诸如bubble sort之类的天真排序算法更有效率,这可能是你想到的 - 它会使单个数字更接近原始顺序,但需要更多步骤才能完成。