Метод resample
Метод resample применяется к DataFrame
с временным индексом и выполняет преобразование частоты
дискретизации данных. Первым параметром передаётся строка
с желаемой частотой, например, 'M' для месяца или 'D' для дня.
Вторым параметром можно указать функцию агрегации, либо
применить цепочку методов после вызова resample.
Синтаксис
df.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)
Пример
Давайте создадим DataFrame с почасовыми данными и передискретизируем их до дневной частоты с суммированием:
import pandas as pd
import numpy as np
index = pd.date_range('2026-01-01', periods=24, freq='H')
df = pd.DataFrame({'a': range(24), 'b': range(10, 34)}, index=index)
res = df.resample('D').sum()
print(res)
Результат выполнения кода:
a b
2026-01-01 276 516
Пример
Передискретизируем данные с почасовой на еженедельную частоту с вычислением среднего значения:
import pandas as pd
import numpy as np
index = pd.date_range('2026-01-01', periods=168, freq='H')
df = pd.DataFrame({'a': range(168), 'b': range(10, 178)}, index=index)
res = df.resample('W').mean()
print(res)
Результат выполнения кода:
a b
2026-01-04 84.000000 94.0
2026-01-11 91.000000 99.0
Пример
Выполним передискретизацию с использованием разных функций агрегации для разных столбцов:
import pandas as pd
import numpy as np
index = pd.date_range('2026-01-01', periods=48, freq='H')
df = pd.DataFrame({'a': range(48), 'b': range(10, 58)}, index=index)
res = df.resample('D').agg({'a': 'sum', 'b': 'mean'})
print(res)
Результат выполнения кода:
a b
2026-01-01 276 28.5
2026-01-02 852 56.5
Пример
Используем параметр closed для управления тем,
какой интервал включается в группу:
import pandas as pd
import numpy as np
index = pd.date_range('2026-01-01', periods=12, freq='H')
df = pd.DataFrame({'a': range(12)}, index=index)
res = df.resample('D', closed='left').sum()
print(res)
Результат выполнения кода:
a
2026-01-01 66
Пример
Используем параметр label для управления меткой
результата передискретизации:
import pandas as pd
import numpy as np
index = pd.date_range('2026-01-01', periods=12, freq='H')
df = pd.DataFrame({'a': range(12)}, index=index)
res = df.resample('D', label='right').sum()
print(res)
Результат выполнения кода:
a
2026-01-02 66