Как сгруппировать по нескольким колонкам?

Есть датасет df с колонками person, year, sum_of_purchase. В датасете может быть много строк - когда один 'person' в один 'year' тратил разные суммы.

Надо сделать: 1) новую колонку df['mean_sum_of_purchases_this_year']; 2) в этой колонке должна быть средняя сумма всех покупок этого 'person' за тот год, который будет в той же строке.

Вот так нахожу среднюю сумму всех трат одного 'person' за все годы:

df["mean_sum_of_purchase_all_years"] = 
    df.person.map(df.groupby("person").sum_of_purchase.mean()) 

Понимаю, что это тема 'groupby multiple times'.

Но что брать - 'map' или 'apply', и как применить?


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

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

попробуйте так:

df["mean_sum_of_purchase_all_years"] = \
    df.groupby(["person", "year"])["sum_of_purchase"].transform("mean")
→ Ссылка