Я пытаюсь понять пример из книги Python для анализа данных Уэса МакКинни. Я просмотрел поваренную книгу pandas, документацию и SO, но не могу найти такой пример.Понимание apply and groupby in Pandas
В примере рассмотрена база данных Федеральной избирательной комиссии 2012 года (https://github.com/wesm/pydata-book/blob/master/ch09.ipynb). Приведенный ниже код определяет верхнюю работу доноров, жертвуя Обаме и Ромни.
Я пытаюсь понять, как функция принимает объект groupby и выполняет на нем другую операцию groupby. Когда я запускаю это вне функции, я получаю сообщение об ошибке. Может ли кто-нибудь пролить свет на это поведение?
Спасибо,
Iwan
# top donor occupations donating to Obama or Romney
def get_top_amounts(group, key, n = 5):
totals = group.groupby(key)['contb_receipt_amt'].sum()
return totals.sort_values(ascending = False)[:n]
# first group by candidate
grouped = fec_mrbo.groupby('cand_nm')
# for each group, group again by contb_receipt_amt so we have a hierarchical index
# take the contribution amount
# then return the total amount for each occupation by cand sorted to give top n
grouped.apply(get_top_amounts, 'contbr_occupation', n= 5)
Результат выглядит следующим образом
cand_nm contbr_occupation
Obama, Barack RETIRED 25270507.23
ATTORNEY 11126932.97
INFORMATION REQUESTED 4849801.96
HOMEMAKER 4243394.30
PHYSICIAN 3732387.44
LAWYER 3159391.87
CONSULTANT 2459812.71
Romney, Mitt RETIRED 11266949.23
INFORMATION REQUESTED PER BEST EFFORTS 11173374.84
HOMEMAKER 8037250.86
ATTORNEY 5302578.82
PRESIDENT 2403439.77
EXECUTIVE 2230653.79
C.E.O. 1893931.11
Thanks Jan! Поэтому, чтобы убедиться, что я получил это. Сгруппированная переменная, определенная выше, является объектом DataFrameGroupBy. Но когда действует функция apply, она ведет себя как DataFrame. Это то, что позволяет выполнять вторую группу, как вы делали в second_group_sum. –
Да, 'grouped' является объектом DataFrameGroupBy. И что он делает, когда вы используете 'apply (function)', в значительной степени разделяет базовый DataFrame на несколько DataFrames, по одному для каждой группы. –