Метод apply
Метод apply класса Resampler
применяет пользовательскую функцию к каждой группе
данных, полученной в результате передискретизации.
В функцию передаётся объект DataFrame или
Series для каждой группы. Метод возвращает
DataFrame или Series с результатами
применения функции.
Синтаксис
resampler.apply(func, *args, **kwargs)
Обязательным параметром является func -
функция для применения к каждой группе. Дополнительные
параметры args и kwargs передаются
в функцию как аргументы.
Пример
Создадим временной ряд и применим пользовательскую функцию для вычисления диапазона значений в каждой группе при передискретизации по месяцам:
import pandas as pd
dates = pd.date_range('2023-01-01', periods=12, freq='D')
ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], index=dates)
res = ser.resample('M').apply(lambda x: x.max() - x.min())
print(res)
Результат выполнения кода:
2023-01-31 11
Freq: M, dtype: int64
Пример
Применим функцию к DataFrame, которая
возвращает несколько статистик для каждой группы:
import pandas as pd
dates = pd.date_range('2023-01-01', periods=12, freq='D')
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
'b': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]
}, index=dates)
def custom_agg(x):
return pd.Series({
'a_sum': x['a'].sum(),
'b_mean': x['b'].mean(),
'a_max': x['a'].max()
})
res = df.resample('M').apply(custom_agg)
print(res)
Результат выполнения кода:
a_sum b_mean a_max
2023-01-31 78 65.0 12
Пример
Используем метод apply с дополнительными
аргументами для гибкой обработки данных:
import pandas as pd
dates = pd.date_range('2023-01-01', periods=12, freq='D')
ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], index=dates)
def multiply(x, factor):
return x.sum() * factor
res = ser.resample('M').apply(multiply, factor=2)
print(res)
Результат выполнения кода:
2023-01-31 156
Freq: M, dtype: int64