熊猫0.12.0
例如,在下面的 DataFrame 中,为什么它会混淆索引?看一下 4,索引从 1,15,6,7 开始。 pandas 用于决定如何排序的推理是什么,我怀疑索引会保持顺序以获得相等的值。
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
事实上,如果你仔细研究一下pandas DataFrame 源代码,你会看到sort()只是一个包装排序索引()具有不同的参数,并且,正如@Jeff 所说这个问题, 排序索引()是首选使用方法。
sort_index() 方法使用numpy.argsort()默认情况下kind=quicksort
,如果您仅按一列排序。和快速排序() is not stable,这就是你的索引看起来混乱的原因。
但你可以通过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
现在排序稳定了,但索引按升序排序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)