Я хочу захватить некоторые категориальные значения с вхождением выше определенного порога:
df:
ticket_id, category, amount --> some more columns
1020 cat1 1000
1022 cat1 55
1023 cat1 12291
1120 cat2 140
1121 cat3 1250
^
|
|
Way more rows with mostly (1020) cat5, (98) cat1, cat3, cat4 and no cat2.
>>>> df.groupby('category')['amount'].count()
category
cat1 100
cat2 1
cat3 6
cat4 2
cat5 1020
Я хочу получить категории с количеством> 20 в списке.В настоящее время я делаю:
>>>> t = test.groupby('disposition')['fine_amount'].agg(['count','mean'])
>>>> t[t['count']>10].index.values
array(['cat1','cat5'])
Теперь это работает, но я считаю, что это можно сделать короче: для ссылки на count column
мне нужно как минимум 2 агрегатные функции, еще больше мне нужна 1 переменная& 2 строки.Я надеялся что-то вроде:
>>>> groupby('category')['amount'].apply(lambda x: x.count() > 10)
, но это дает:
cat1 100 True
etc
>>>> groupby('category')['amount'].apply(lambda x: x[x.count() > 10])
Fails completely
>>>> groupby('category')['amount'].count().nlargest(2)
gives the correct list but in this case because I know there are 2 elements.
Какое самое элегантное / эффективное решение?