polars.Series.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»).
- Возвращает:
Примеры
>>> 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["values"].ewm_mean_by(df["times"], half_life="4d") shape: (5,) Series: 'values' [f64] [ 0.0 0.292893 1.492474 null 3.254508 ]
Series.ewm_mean_by(
by: IntoExpr,
*,
half_life: str_ | timedelta,
) → Series
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/series/api/polars.Series.ewm_mean_by.html