python - 如何查找 Pandas 系列中出现特定次数的值?

标签 python pandas counter series

给定以下系列:

sr = pd.Series([5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8])

我想找到出现 3 次的值。这是我的解决方案,它似乎有效但看起来很奇怪:

(sr.value_counts() == 3)[sr.value_counts() == 3].index.values

我还缺少其他/明显的方法吗?

最佳答案

您的逻辑很好,您只是不应该重复最昂贵的部分,即计数。将其存储在变量中并重复使用。您可能也不需要检索底层 NumPy 数组,pd.Index 对象通常就足够了:

sr = pd.Series([5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8])

counts = sr.value_counts()

res = counts[counts == 3].index
# Int64Index([8, 6, 5], dtype='int64')

没有现成方法满足您的需求的原因是任何解决方案都需要最小 O(n) 时间复杂度,这是 value_counts 的复杂度。没有办法解决这个问题。

另一种选择是基于dictcollections.Counter,在按计数过滤时效率较低。由于 NumPy 数组在内存中的存储效率很高,因此 bool 过滤相对于字典迭代而言效率更高。

关于python - 如何查找 Pandas 系列中出现特定次数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267157/

相关文章:

python - 与新列中起始点的条件增量日期时间差作为整数

Python 相当于 atoi/atof

python - WTForms 错误 :TypeError: formdata should be a multidict-type wrapper

python - 如何从 Python 中的元组中获取整数?

python - 比较两个不同的 python 计数器对象

html - CSS 编号问题混合编号

python - Tkinter 在带有 lambda 的 for 循环中分配按钮命令

python - Pandas Python 条件

python - Pandas 数据帧系列 : check if specific value exists

python - 将每日数据重新采样为每小时数据帧并复制内容