猿问

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

我正在尝试将 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)

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


森林海
浏览 144回答 3
3回答

拉丁的传说

您可以使用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  B0  1  21  1  4

慕哥6287543

行数在属性中.shape[0]:df.groupby('A').filter(lambda x: x.shape[0] >= min_size)注意:如果要删除小于最小尺寸的组,请保留大于或处于最小尺寸(>=,不是>)的组。

qq_笑_17

groupby.filter对于较大的数据集/大量组,可能会非常慢。更快的方法是使用groupby.transform:下面是一个例子,首先创建数据集:import pandas as pdimport numpy as npdf = pd.concat([    pd.DataFrame({'y': np.random.randn(np.random.randint(1,5))}).assign(A=str(i))     for i in range(1,1000)]).reset_index(drop=True)print(df)             y    A0     1.375980    11    -0.023861    12    -0.474707    13    -0.151859    24    -1.696823    2...        ...  ...2424  0.276737  9982425 -0.142171  9992426 -0.718891  9992427 -0.621315  9992428  1.335450  999[2429 rows x 2 columns]计时:
随时随地看视频慕课网APP

相关分类

Python
我要回答