Отфильтровать 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)