当前位置: 首页 > 面试题库 >

Python Pandas:排除低于特定频率计数的行

姬昀
2023-03-14
问题内容

所以我有一个pandas DataFrame看起来像这样:

r vals    positions
1.2       1
1.8       2
2.3       1
1.8       1
2.1       3
2.0       3
1.9       1
...       ...

我希望按位置过滤掉所有不会出现至少20次的行。我看过这样的东西

g=df.groupby('positions')
g.filter(lambda x: len(x) > 20)

但这似乎不起作用,而且我不了解如何从中获取原始数据框。先谢谢您的帮助。


问题答案:

在您的有限数据集上,以下工作:

In [125]:
df.groupby('positions')['r vals'].filter(lambda x: len(x) >= 3)

Out[125]:
0    1.2
2    2.3
3    1.8
6    1.9
Name: r vals, dtype: float64

您可以分配此过滤器的结果,并将其isin用于过滤orig df:

In [129]:
filtered = df.groupby('positions')['r vals'].filter(lambda x: len(x) >= 3)
df[df['r vals'].isin(filtered)]

Out[129]:
   r vals  positions
0     1.2          1
1     1.8          2
2     2.3          1
3     1.8          1
6     1.9          1

您只需要更改320您的情况

另一种方法是用于value_counts创建聚合系列,然后我们可以使用它来过滤您的df:

In [136]:
counts = df['positions'].value_counts()
counts

Out[136]:
1    4
3    2
2    1
dtype: int64

In [137]:
counts[counts > 3]

Out[137]:
1    4
dtype: int64

In [135]:
df[df['positions'].isin(counts[counts > 3].index)]

Out[135]:
   r vals  positions
0     1.2          1
2     2.3          1
3     1.8          1
6     1.9          1

编辑

如果要在数据帧而不是在系列上过滤groupby对象,则可以filter直接调用groupby对象:

In [139]:
filtered = df.groupby('positions').filter(lambda x: len(x) >= 3)
filtered

Out[139]:
   r vals  positions
0     1.2          1
2     2.3          1
3     1.8          1
6     1.9          1


 类似资料:
  • 问题内容: 我必须使用python计算文本中的单词频率。我想到将单词保留在字典中,并对每个单词进行计数。 现在,如果我必须根据出现次数对单词进行排序。我可以使用相同的词典来代替使用具有键作为计数和单词数组作为值的新词典吗? 问题答案: 您可以使用相同的字典: 第二行显示: 如果只需要排序的单词列表,请执行以下操作: 该行打印:

  • 问题内容: 这是Python和NLTK新手问题。 我想查找双峰发生的频率,这些双峰发生在一起的次数超过10次,并且具有最高的PMI。 为此,我正在使用此代码 但是,这并不会将结果限制在前20位。我看到的结果的频率小于10。我是Python世界中的新手。 有人可以指出如何修改它以仅获得前20名。 谢谢 问题答案: 问题在于您尝试使用的方式。我们正在讨论单词搭配。如您所知,单词搭配是关于单词之间的依赖

  • 问题内容: 我有一张表,上面有像 我想做一张像这样的桌子 等等。 问题答案: WITH basedata(id,keywords) AS ( SELECT 1,’cat, dog, man, mouse’ union all SELECT 2 ,’man, pen, pencil, eraser’ union all SELECT 3,’dog, man, friends’ union all S

  • 问题内容: 假设我有一个单词列表,并且我想查找每个单词出现在该列表中的次数。 一个明显的方法是: 但是我发现这段代码不是很好,因为该程序在单词列表中运行两次,一次构建集合,第二次计算出现次数。 当然,我可以编写一个函数来遍历列表并进行计数,但是那不是Pythonic。那么,有没有更有效和Pythonic的方法呢? 问题答案: 在类中模块是专为解决这类问题的目的:

  • 问题内容: 我有这段代码,我想知道如何排除除特定路径中的一个以外的所有json 问题答案: 根据Webpack文档,您可以执行以下操作。

  • 今天我决定测试一下,结果我惊讶地发现(至少在C#正则表达式引擎中)似乎比其他两个没有太大区别的代码效率要低。下面是我测试输出的10000个由1000个随机字符组成的字符串,其中5077个实际包含一个数字: 这对我来说是一个惊喜,有两个原因,如果有人能给我一些启示,我会很感兴趣: 我本以为范围的实现会比集合的实现效率高得多。 我不能理解为什么比差。除了的简写之外,还有其他内容吗? 下面是测试代码: