April 21, 2022
Сводные агрегации c Pandas
Рассмотрим, какие агрегирующие функции можно задавать в pivot_table и как определять собственные методы. Для примера будем работать со следующим датафреймом:
import pandas as pd
import numpy as np
df = pd.DataFrame([['Иванов ИИ', 1, 12], ['Федоров АК', 2, np.nan], 
                   ['Арсентьева ВБ', 1, 13],['Черкасова АА', 1, 13],
                  ['Чувашов ВК', 1, None], ['Галанова ББ', 2, 14]], 
                  columns=['fio', 'gr_id', 'revenue'])
dfДля создания сводных статистик можно использовать функцию pivot_table, в параметр aggfunc которой передаются функции агрегации (поддерживаются как строчные наименования, так и ссылки). Например, сгруппируем по полю gr_id и посчитаем метрики для revenue:
df.pivot_table(index='gr_id', values='revenue', aggfunc=['count', np.mean])
К числу наиболее часто используемых статистик относятся count, nunique, min, max, std, sum, mean, median, var, quantile:
df.pivot_table(index='gr_id', values='revenue', 
               aggfunc=['count', 'nunique', 'min', 'max', 'std', 'sum', 
                        'mean', 'median', 'var', 'quantile'])
Обратите внимание, что quantile по умолчанию возвращает медиану, чтобы передать значение квантили можно воспользоваться partial и передать в pivot_table ссылку:
from functools import partial
q_25 = partial(pd.Series.quantile, q=0.25) 
df.pivot_table(index='gr_id', values='revenue', 
               aggfunc=[q_25])Также в pivot_table можно передавать собственные функции:
def num_vals(col):
    return col.shape[0]
df.pivot_table(index='gr_id', values='revenue', aggfunc=['count', 'mean', num_vals])
df.pivot_table(index='gr_id', values='revenue', aggfunc=['count', 'mean', 
                                                         lambda x: x.shape[0]])