gpt4 book ai didi

python - Pandas Series value_counts 对不同计数的工作方式不同

转载 作者:太空狗 更新时间:2023-10-30 00:12:34 24 4
gpt4 key购买 nike

例如:

df1 = pd.DataFrame(np.repeat(np.arange(1,7),3), columns=['A'])

df1.A.value_counts(sort=False)
1 3
2 3
3 3
4 3
5 3
6 3
Name: A, dtype: int64

df2 = pd.DataFrame(np.repeat(np.arange(1,7),100), columns=['A'])

df2.A.value_counts(sort=False)
1 100
2 100
3 100
4 100
5 100
6 100
Name: A, dtype: int64

在上面的示例中,value_counts 完美运行并给出了所需的结果。而当涉及到更大的数据帧时,它会给出不同的输出。这里的 A 值已经排序并且计数也相同,但是 A 的索引顺序在 value_counts 之后发生了变化。为什么它对小计数正确但对大计数却不正确:

df3 = pd.DataFrame(np.repeat(np.arange(1,7),1000), columns=['A'])

df3.A.value_counts(sort=False)
4 1000
1 1000
5 1000
2 1000
6 1000
3 1000
Name: A, dtype: int64

在这里,我可以执行 df3.A.value_counts(sort=False).sort_index()df3.A.value_counts(sort=False).reindex(df.A.unique ())。我想知道为什么它对不同的计数表现不同?

使用:

Numpy version :1.15.2
Pandas version :0.23.4

最佳答案

这实际上是一个已知问题。

如果您浏览源代码 -

  1. C:\ProgramData\Anaconda3\Lib\site-packages\pandas\core\algorithims.py 581 行是原始实现
  2. bins=None
  3. 时,它为 int64 值调用 _value_counts_arraylike
  4. 此函数调用 - keys, counts = htable.value_count_int64(values, dropna)

如果您随后查看 htable 实现,您会得出结论,键的顺序是任意的,取决于 hashtable 的工作方式。

它不保证任何类型的订购。通常,此例程按最大值排序,这几乎总是您想要的。

我想他们可以将其更改为 sort=False 表示原始排序。我不知道这是否真的会破坏任何东西(并且在内部完成这不是很昂贵,因为独特之处已经为人所知)。

顺序从 pandas/hashtable.pyx.build_count_table_object() 开始改变 . pymap 的大小调整通过散列值移动条目。

这是 full讨论

关于python - Pandas Series value_counts 对不同计数的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53294222/

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