polars.Expr.ewm_mean_by
-
Вычисляет экспоненциально взвешенное скользящее среднее на основе времени.
Для наблюдений \(x_0, x_1, \ldots, x_{n-1}\) в моменты времени \(t_0, t_1, \ldots, t_{n-1}\) EWMA вычисляется следующим образом:
\[ \begin{align}\begin{aligned}y_0 &= x_0\\\alpha_i &= 1 - \exp \left\{ \frac{ -\ln(2)(t_i-t_{i-1}) } { \tau } \right\}\\y_i &= \alpha_i x_i + (1 - \alpha_i) y_{i-1}; \quad i > 0\end{aligned}\end{align} \]где \(\tau\) —
half_life.- Параметры:
-
- by
-
Моменты времени, по которым вычисляется среднее. Должен иметь тип данных
DateTime,Date,UInt64,UInt32,Int64илиInt32. - half_life
-
Промежуток времени, за который значение наблюдения уменьшается вдвое.
Можно задать объектом timedelta или строкой, используя следующий формат:
- 1ns (1 наносекунда)
- 1us (1 микросекунда)
- 1ms (1 миллисекунда)
- 1s (1 секунда)
- 1m (1 минута)
- 1h (1 час)
- 1d (1 день)
- 1w (1 неделя)
- 1i (1 индекс)
Или комбинируйте значения: “3d12h4m25s” # 3 дня, 12 часов, 4 минуты и 25 секунд
Обратите внимание:
half_lifeсчитается постоянным промежутком времени. Календарные интервалы, например месяцы (или даже дни в случае часового пояса), не поддерживаются. Укажите приблизительно эквивалентное количество часов (например, ‘370h’ вместо ‘1mo’).
- Возвращает:
-
- Expr
-
Float16, если входные данные имеют типFloat16; class:.Float32, если входные данные имеют типFloat32; в противном случае class:.Float64.
Примеры
>>> from datetime import date, timedelta >>> df = pl.DataFrame( ... { ... "values": [0, 1, 2, None, 4], ... "times": [ ... date(2020, 1, 1), ... date(2020, 1, 3), ... date(2020, 1, 10), ... date(2020, 1, 15), ... date(2020, 1, 17), ... ], ... } ... ).sort("times") >>> df.with_columns( ... result=pl.col("values").ewm_mean_by("times", half_life="4d"), ... ) shape: (5, 3) ┌────────┬────────────┬──────────┐ │ values ┆ times ┆ result │ │ --- ┆ --- ┆ --- │ │ i64 ┆ date ┆ f64 │ ╞════════╪════════════╪══════════╡ │ 0 ┆ 2020-01-01 ┆ 0.0 │ │ 1 ┆ 2020-01-03 ┆ 0.292893 │ │ 2 ┆ 2020-01-10 ┆ 1.492474 │ │ null ┆ 2020-01-15 ┆ null │ │ 4 ┆ 2020-01-17 ┆ 3.254508 │ └────────┴────────────┴──────────┘
Expr.ewm_mean_by(
by: str_ | IntoExpr,
*,
half_life: str_ | timedelta,
) → Expr
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.ewm_mean_by.html