Pandas groupby 然后删除低于指定大小的组

Cal*_*res 5 python pandas

我正在尝试将 DataFrame 分成组并将组删除到最小大小(小异常值)以下。

这是我尝试过的:

df.groupby(['A']).filter(lambda x: x.count() > min_size)
df.groupby(['A']).filter(lambda x: x.size() > min_size)
df.groupby(['A']).filter(lambda x: x['A'].count() > min_size)
df.groupby(['A']).filter(lambda x: x['A'].size() > min_size)
Run Code Online (Sandbox Code Playgroud)

但是这些要么抛出异常,要么返回与我预期不同的表。我只想过滤,而不是计算新表。

And*_*den 8

您可以使用len:

In [11]: df = pd.DataFrame([[1, 2], [1, 4], [5, 6]], columns=['A', 'B'])

In [12]: df.groupby('A').filter(lambda x: len(x) > 1)
Out[12]:
   A  B
0  1  2
1  1  4
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我没有意识到“filter”实际上返回的是原始DataFrame(而不是分组的DataFrame)。因此,获取大小 > N 的组的正确方法是 df.groupby('A').filter(lambda x: len(x) > N).groupby('A')`。 (2认同)