为了账号安全,请及时绑定邮箱和手机立即绑定

如何找到在 Pandas 系列中出现特定次数的值?

如何找到在 Pandas 系列中出现特定次数的值?

繁星淼淼 2021-06-11 15:33:33
鉴于以下系列: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有没有其他/明显的方式我失踪了?

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

您的逻辑很好,您只是不应该重复最昂贵的部分,即计数。将其存储在变量中并重用。您可能也不需要检索底层 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-basedcollections.Counter效率较低。由于 NumPy 数组有效地存储在内存中,因此布尔过滤相对于字典迭代是有效的。


查看完整回答
反对 回复 2021-06-15
?
UYOU

TA贡献1878条经验 获得超4个赞

这里有一个奇怪的选择(只是为了好玩):

sr.groupby(sr).filter(lambda x: len(x) == 3).unique()
#array([5, 6, 8])


查看完整回答
反对 回复 2021-06-15
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

使用 loc

sr.value_counts().loc[lambda x : x==3].index
Out[162]: Int64Index([8, 6, 5], dtype='int64')


查看完整回答
反对 回复 2021-06-15
  • 3 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号