Функция вычисления скользящих статистик в Polars
# пишем функцию, вычисляющую скользящие
# статистики в Polars
def polars_moving_stats(pl_data,
pl_series,
periods=1,
min_periods=1,
window_size=4,
out_column='Mov_stat',
aggfunc='mean',
strategy=None):
"""
Вычисляет скользящие статистики в Polars.
Параметры
----------
pl_data:
Polars.DataFrame
pl_series:
Polars.Series
periods: int, по умолчанию 1
Порядок лага, с которым вычисляем скользящие
статистики.
min_periods: int, по умолчанию 1
Минимальное количество наблюдений в окне для
вычисления скользящих статистик.
window_size: int, по умолчанию 4
Ширина окна.
out_column: string
Название результирующего столбца.
aggfunc: string, по умолчанию 'mean'
Агрегирующая функция.
strategy: string, по умолчанию None
Стратегия импутации пропусков.
"""
if aggfunc == 'mean':
pl_data = pl_data.with_column(pl.col(pl_series).shift(
periods=periods).rolling_mean(
window_size=window_size,
min_periods=min_periods).alias(out_column))
if aggfunc == 'min':
pl_data = pl_data.with_column(pl.col(pl_series).shift(
periods=periods).rolling_min(
window_size=window_size,
min_periods=min_periods).alias(out_column))
pl_data = pl_data.fill_null(strategy=strategy)
return pl_data
# пишем функцию, вычисляющую скользящие
# статистики в Polars
def polars_moving_stats(pl_data,
pl_series,
periods=1,
min_periods=1,
window_size=4,
out_column='Mov_stat',
aggfunc='mean',
strategy=None):
"""
Вычисляет скользящие статистики в Polars.
Параметры
----------
pl_data:
Polars.DataFrame
pl_series:
Polars.Series
periods: int, по умолчанию 1
Порядок лага, с которым вычисляем скользящие
статистики.
min_periods: int, по умолчанию 1
Минимальное количество наблюдений в окне для
вычисления скользящих статистик.
window_size: int, по умолчанию 4
Ширина окна.
out_column: string
Название результирующего столбца.
aggfunc: string, по умолчанию 'mean'
Агрегирующая функция.
strategy: string, по умолчанию None
Стратегия импутации пропусков.
"""
if aggfunc == 'mean':
pl_data = pl_data.with_column(pl.col(pl_series).shift(
periods=periods).rolling_mean(
window_size=window_size,
min_periods=min_periods).alias(out_column))
if aggfunc == 'min':
pl_data = pl_data.with_column(pl.col(pl_series).shift(
periods=periods).rolling_min(
window_size=window_size,
min_periods=min_periods).alias(out_column))
pl_data = pl_data.fill_null(strategy=strategy)
return pl_data