Как отфильтровать DF передавая в него Series c метками True/False

Прошу подсказать, есть такое задание:

Создайте новый столбец - mcc_code+tr_type, сконкатенировав значения из соответствующих столбцов. (*) Для получившегося столбца определите дисперсию сумм трат тех категорий, в которых не менее 10 наблюдений.

transactions['mcc_code_and_tr_type'] = transactions['mcc_code'].astype(str) + transactions['tr_type'].astype(str)
groups = transactions.groupby(['mcc_code_and_tr_type']).size() > 10

вот что я смог сделать, получить Серию примерно с такими записями.

17111110     True
17311010    False
17311110    False
17991110     True
27411110    False
27411210    False
30001010     True
30001100     True
30001110     True
30001200     True
30001210     True
30006000     True
30006010    False

Как мне отфильтровать исходный DF, там около милиона записей, но серия всего 900 (по кол-ву индексов не совподает). Прошла мысль, что сортировать вообще не надо. Сумма трат это значения по столбцу amount со отрицательный значением. (<0)

DF как пример

amount  term_id     gender  mcc_code_and_tr_type
345083  -1257.71    248523  1.0     59121010
694663  -67377.47   462049  NaN     60112010
527513  56147.89    85814   NaN     60117010
573203  -110049.87  NaN     NaN     60112010
460705  -11229.58   10367164    1.0     59411010
402169  -10645.64   293228  0.0     54111010
137120  -3076.90    00035644    1.0     54991110

Ответы (1 шт):

Автор решения: MaxU

Чтобы оставить в DataFrame только те группы, которые содержат минимум N строк, можно воспользоваться DataFrame.groupby(...).filter(lambda x: len(x) >= N).

Пример:

Исходный DF:

In [178]: df
Out[178]:
   grp  amt
0    1   11
1    1   12
2    1   13
3    2   14
4    2   15
5    3   16
6    4   17

Решение - оставлем только те строки, для которых существует минимум 2 одинаковых grp (т.е. в итоге должны остаться только записи с grp: 1 и 2):

N =  2
res = df.groupby("grp").filter(lambda x: len(x) >= N)

Результат:

In [185]: res
Out[185]:
   grp  amt
0    1   11
1    1   12
2    1   13
3    2   14
4    2   15

PS я думаю, посчитать дисперсию труда не составит.

→ Ссылка