Отфильтровать dataframe на основе выборки

Имеется некий набор данных tr_new, в нем есть столбец mcc_code Необходимо выбрать строки из tr_new в которых mcc_code коды встретились в более чем 60000 раз.

Я использую

mccmax=tr_new['mcc_code'].value_counts()>60000

в итоге получаю набор с False и True. А это совсем не то!

6010     True
5411     True   
... 
9402    False
8244    False

Мне нужно, просто отфильтровать список, а потом еще сгруппировать по двум полям (например [day] и [mcc_code], получая средние значения суммы по третьему полю [amount].


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

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

Что-то такое должно быть:

vc = tr_new['mcc_code'].value_counts()
mccmax=tr_new[tr_new['mcc_code'].isin(vc[(vc>60000).index])]

По шагам:

  • vc[(vc>60000).index] - получаем собственно список самих таких mcc кодов, удовлетворяющих условию
  • tr_new['mcc_code'].isin(<полученный ранее список кодов>) - булева маска на строки tr_new, mcc код в которых входит в наш список
  • tr_new[<булева маска>] - собственно записи из tr_new по этой маске
→ Ссылка
Автор решения: MaxU

воспользуйтесь DataFrameGroupBy.filter():

res = tr_new.groupby("mcc_code").filter(lambda x: len(x) > 60000)
→ Ссылка