下面的例子......为什么会发生这种情况以及如何防止它?
>>> df = pd.DataFrame({'a': list(range(150)), 'b': [1, 2, 3] * 50})
>>> df.sort_values('b').equals(df.sort_values('b').sort_values('b'))
False
>>> df.sort_values('b').head()
a b
0 0 1
39 39 1
42 42 1
45 45 1
132 132 1
>>> df.sort_values('b').sort_values('b').head()
a b
0 0 1
87 87 1
120 120 1
84 84 1
81 81 1
对我来说工作指定mergesort
就像只有一种稳定的排序方法DataFrame.sort_values http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html,因为如果仅按一列排序是默认方法kind=quicksort
:
kind{‘快速排序’、‘合并排序’、‘堆排序’},默认快速排序
排序算法的选择。另请参阅 ndarray.np.sort 了解更多信息。归并排序是唯一稳定的算法。对于 DataFrame,此选项仅在对单个列或标签进行排序时应用。
如果按多列排序默认是mergesort
.
print (df.sort_values('b', kind='mergesort').head())
a b
0 0 1
3 3 1
6 6 1
9 9 1
12 12 1
print (df.sort_values('b', kind='mergesort').sort_values('b', kind='mergesort').head())
a b
0 0 1
3 3 1
6 6 1
9 9 1
12 12 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)