Метод resample
Метод resample применяется к Series
с временным индексом и выполняет передискретизацию данных.
Первым параметром передаётся правило изменения частоты
(например, 'D' для дней, 'H' для часов, 'M' для месяцев).
Метод возвращает объект Resampler, к которому
затем применяется функция агрегации (сумма, среднее и т.д.).
Синтаксис
ser.resample(rule, axis=0, closed=None, label=None, convention='start', kind=None, loffset=None, base=None, on=None, level=None, origin='start_day', offset=None, group_keys=False)
Пример
Давайте создадим временной ряд с ежедневными данными и выполним передискретизацию с понижением частоты до недельной с вычислением суммы:
import pandas as pd
dates = pd.date_range('2024-01-01', periods=14, freq='D')
ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], index=dates)
res = ser.resample('W').sum()
print(res)
Результат выполнения кода:
2024-01-07 28
2024-01-14 77
Freq: W-SUN, dtype: int64
Пример
Выполним передискретизацию с повышением частоты с ежедневного на часовой уровень, используя метод заполнения пропусков ffill:
import pandas as pd
dates = pd.date_range('2024-01-01', periods=3, freq='D')
ser = pd.Series([10, 20, 30], index=dates)
res = ser.resample('12H').ffill()
print(res)
Результат выполнения кода:
2024-01-01 00:00:00 10
2024-01-01 12:00:00 10
2024-01-02 00:00:00 20
2024-01-02 12:00:00 20
2024-01-03 00:00:00 30
Freq: 12H, dtype: int64
Пример
Рассчитаем среднее значение за каждый месяц с помощью агрегации mean:
import pandas as pd
dates = pd.date_range('2024-01-01', periods=60, freq='D')
ser = pd.Series(range(1, 61), index=dates)
res = ser.resample('ME').mean()
print(res)
Результат выполнения кода:
2024-01-31 16.0
2024-02-29 45.5
Freq: ME, dtype: float64
Пример
Применим несколько агрегаций одновременно с помощью метода agg:
import pandas as pd
dates = pd.date_range('2024-01-01', periods=10, freq='D')
ser = pd.Series([5, 3, 8, 4, 2, 9, 6, 7, 1, 10], index=dates)
res = ser.resample('5D').agg(['sum', 'mean', 'max', 'min'])
print(res)
Результат выполнения кода:
sum mean max min
2024-01-05 22 4.4 8 2
2024-01-10 33 6.6 10 1