默认情况下,Series.values_counts
按计数排序,按降序排列:
In [192]: pd.Series([3,0,2,0,0,1,0,0,0,1,1,0,1,0,2,2,2,2,2,0,0,2]).value_counts()
Out[192]:
0 10
2 7
1 4
3 1
dtype: int64
如果我通过sort=False
,它似乎会尝试按值键排序:
In [193]: pd.Series([3,0,2,0,0,1,0,0,0,1,1,0,1,0,2,2,2,2,2,0,0,2]).value_counts(sort=False)
Out[193]:
0 10
1 4
2 7
3 1
dtype: int64
但是,当我增加系列的长度时,排序将恢复为原始顺序:
In [194]: pd.Series([3,0,2,0,0,1,0,0,0,1,1,0,1,0,2,2,2,2,2,0,0,2]*100).value_counts(sort=False)
Out[194]:
0 1000
2 700
1 400
3 100
dtype: int64
有什么想法在这里发生了什么?
答案 0 :(得分:3)
这是对的。您要求.value_counts()
不要对结果进行排序,因此它不会。下面我模拟sort=True
实际做了什么,这只是一个sort_values。如果你没有排序,那么你将获得由哈希表完成的计数结果,因此是任意顺序。
In [39]: pd.Series([3,0,2,0,0,1,0,0,0,1,1,0,1,0,2,2,2,2,2,0,0,2]).value_counts(sort=False).sort_values(ascending=False)
Out[39]:
0 10
2 7
1 4
3 1
dtype: int64
In [40]: pd.Series([3,0,2,0,0,1,0,0,0,1,1,0,1,0,2,2,2,2,2,0,0,2]*100).value_counts(sort=False).sort_values(ascending=False)
Out[40]:
0 1000
2 700
1 400
3 100
dtype: int64