大型系列的Pandas value_counts(sort = False)不起作用

时间:2015-11-11 22:45:52

标签: pandas

默认情况下,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

有什么想法在这里发生了什么?

1 个答案:

答案 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