给定以下系列:
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
的复杂度。没有办法解决这个问题。
另一种选择是基于dict
的collections.Counter
,在按计数过滤时效率较低。由于 NumPy 数组在内存中的存储效率很高,因此 bool 过滤相对于字典迭代而言效率更高。
关于python - 如何查找 Pandas 系列中出现特定次数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267157/