gpt4 book ai didi

python - 当有平局时, Pandas 如何决定排序?

转载 作者:太空狗 更新时间:2023-10-30 01:59:02 24 4
gpt4 key购买 nike

Pandas 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

最佳答案

实际上,如果您查看 source code of pandas DataFrame ,你会看到 sort()只是 sort_index() 的包装具有不同的参数,并且正如@Jeff 在 this question 中所说, sort_index()是首选的使用方法。

使用 numpy.argsort() 的 sort_index() 方法如果您仅按一列排序,则使用默认的 kind=quicksort。和 quicksort()不是 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

现在排序是稳定的,但是索引是升序排序的

关于python - 当有平局时, Pandas 如何决定排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com