pandas.DataFrame.ewm#
-
DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=
, times=None, method='single')[источник]# Предоставить экспоненциально взвешенные (EW) вычисления.
Ровно один из
com,span,halflife, илиalphaдолжен быть предоставлен, еслиtimesне предоставлен. Еслиtimesпредоставлен,halflifeи один изcom,spanилиalphaможет быть предоставлен.- Параметры:
- comfloat, опционально
Укажите затухание в терминах центра масс
\(\alpha = 1 / (1 + com)\), для \(com \geq 0\).
- spanfloat, опционально
Укажите затухание в терминах интервала
\(\alpha = 2 / (span + 1)\), для \(span \geq 1\).
- период полураспадаfloat, str, timedelta, optional
Укажите затухание в терминах периода полураспада
\(\alpha = 1 - \exp\left(-\ln(2) / halflife\right)\), для \(halflife > 0\).
Если
timesуказана, конвертируемая единица времени, за которую наблюдение уменьшается до половины своего значения. Применимо только кmean(), и значение периода полураспада не будет применяться к другим функциям.- alphafloat, опционально
Укажите коэффициент сглаживания \(\alpha\) напрямую
\(0 < \alpha \leq 1\).
- min_periodsint, по умолчанию 0
Минимальное количество наблюдений в окне, необходимое для получения значения; в противном случае результат
np.nan.- настроитьbool, по умолчанию True
Разделить на затухающий корректирующий коэффициент в начальных периодах для учёта дисбаланса в относительных весах (рассматривая EWMA как скользящее среднее).
Когда
adjust=True(по умолчанию), функция EW рассчитывается с использованием весов \(w_i = (1 - \alpha)^i\). Например, экспоненциально взвешенное скользящее среднее ряда [\(x_0, x_1, ..., x_t\)] будет:
\[y_t = \frac{x_t + (1 - \alpha)x_{t-1} + (1 - \alpha)^2 x_{t-2} + ... + (1 - \alpha)^t x_0}{1 + (1 - \alpha) + (1 - \alpha)^2 + ... + (1 - \alpha)^t}\]Когда
adjust=False, экспоненциально взвешенная функция вычисляется рекурсивно:
\[\begin{split}\begin{split} y_0 &= x_0\\ y_t &= (1 - \alpha) y_{t-1} + \alpha x_t, \end{split}\end{split}\]- ignore_nabool, по умолчанию False
Игнорировать пропущенные значения при расчёте весов.
Когда
ignore_na=False(по умолчанию), веса основаны на абсолютных позициях. Например, веса \(x_0\) и \(x_2\) используется при вычислении итогового взвешенного среднего [\(x_0\), None, \(x_2\)] являются \((1-\alpha)^2\) и \(1\) ifadjust=True, и \((1-\alpha)^2\) и \(\alpha\) ifadjust=False.Когда
ignore_na=True, веса основаны на относительных позициях. Например, веса \(x_0\) и \(x_2\) используется при вычислении итогового взвешенного среднего [\(x_0\), None, \(x_2\)] являются \(1-\alpha\) и \(1\) ifadjust=True, и \(1-\alpha\) и \(\alpha\) ifadjust=False.
- ось{0, 1}, по умолчанию 0
Если
0или'index', вычислять по строкам.Если
1или'columns', вычислять по столбцам.Для Series этот параметр не используется и по умолчанию равен 0.
- разnp.ndarray, Series, по умолчанию None
Применимо только к
mean().Времена, соответствующие наблюдениям. Должны монотонно возрастать и
datetime64[ns]тип данных.Если 1-D массивоподобный, последовательность с той же формой, что и наблюдения.
- методstr {'single', 'table'}, по умолчанию 'single'
Добавлено в версии 1.4.0.
Выполнить операцию скользящего окна для отдельного столбца или строки (
'single') или по всему объекту ('table').Этот аргумент реализован только при указании
engine='numba'в вызове метода.Применимо только к
mean()
- Возвращает:
- pandas.api.typing.ExponentialMovingWindow
Смотрите также
Примечания
См. Операции скользящего окна для получения дополнительных сведений об использовании и примеров.
Примеры
>>> df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]}) >>> df B 0 0.0 1 1.0 2 2.0 3 NaN 4 4.0
>>> df.ewm(com=0.5).mean() B 0 0.000000 1 0.750000 2 1.615385 3 1.615385 4 3.670213 >>> df.ewm(alpha=2 / 3).mean() B 0 0.000000 1 0.750000 2 1.615385 3 1.615385 4 3.670213
настроить
>>> df.ewm(com=0.5, adjust=True).mean() B 0 0.000000 1 0.750000 2 1.615385 3 1.615385 4 3.670213 >>> df.ewm(com=0.5, adjust=False).mean() B 0 0.000000 1 0.666667 2 1.555556 3 1.555556 4 3.650794
ignore_na
>>> df.ewm(com=0.5, ignore_na=True).mean() B 0 0.000000 1 0.750000 2 1.615385 3 1.615385 4 3.225000 >>> df.ewm(com=0.5, ignore_na=False).mean() B 0 0.000000 1 0.750000 2 1.615385 3 1.615385 4 3.670213
раз
Экспоненциально взвешенное среднее с весами, рассчитанными с помощью timedelta
halflifeотносительноtimes.>>> times = ['2020-01-01', '2020-01-03', '2020-01-10', '2020-01-15', '2020-01-17'] >>> df.ewm(halflife='4 days', times=pd.DatetimeIndex(times)).mean() B 0 0.000000 1 0.585786 2 1.523889 3 1.523889 4 3.233686