Pandas groupby: получить размер группы, зная ее идентификатор (из .grouper.group_info [0])

В следующем фрагменте data есть pandas.DataFrame, а indices - это набор столбцов data. После группировки данных с помощью groupby меня интересуют идентификаторы групп, но только те, размер которых превышает порог (скажем: 3).

group_ids=data.groupby(list(data.columns[list(indices)])).grouper.group_info[0]

Теперь, как я могу найти, какая группа имеет размер больше или равен 3, зная идентификатор группы? Я хочу только идентификаторы групп с определенным размером.

#TODO: filter out ids from group_ids which correspond to groups with sizes < 3 

Ответ 1

Один из способов - использовать size метод groupby:

g = data.groupby(...)
size = g.size()
size[size > 3]

Например, здесь существует только одна группа размером > 1:

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

In [12]: df
Out[12]:
   A  B
0  1  2
1  3  4
2  1  6 

In [13]: g = df.groupby('A')

In [14]: size = g.size()

In [15]: size[size > 1]
Out[15]:
A
1    2
dtype: int64

Если вам было интересно ограничить DataFrame теми, что были в больших группах, вы можете использовать метод :

In [21]: g.filter(lambda x: len(x) > 1)
Out[21]:
   A  B
0  1  2
2  1  6