微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Pandas系列中查找特定次数的值?

鉴于以下系列:

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的复杂性.没有办法解决这个问题.

另一种选择,基于字典的collections.Counter,在按计数过滤时效率较低.由于NumPy数组有效地存储在内存中,因此布尔过滤相对于字典迭代是有效的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐