pandas.DataFrame.ewm#
- DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=_NoDefault.no_default, times=None, method='single')[源代码]#
提供指数加权 (EW) 计算。
如果未提供
times,则必须提供com、span、halflife或alpha中的一个。如果提供了times,则可以提供halflife和com、span或alpha中的一个。- Parameters:
- comfloat,可选
以质心指定衰减
\(\alpha = 1 / (1 + com)\) ,其中 \(com \geq 0\) 。
- spanfloat,可选
以跨度指定衰减
\(\alpha = 2 / (span + 1)\) ,其中 \(span \geq 1\) 。
- halflifefloat、str、timedelta,可选
以半衰期指定衰减
\(\alpha = 1 - \exp\left(-\ln(2) / halflife\right)\) ,其中 \(halflife > 0\) 。
如果指定了
times,则为一个观测值衰减到其一半值的时间(可转换为 timedelta 类型)。仅适用于mean(),半衰期值不适用于其他函数。- alphafloat,可选
直接指定平滑因子 \(\alpha\)
\(0 < \alpha \leq 1\) 。
- min_periodsint,默认为 0
窗口中必须存在的最小观测值数量;否则,结果为
np.nan。- adjustbool, default True
在初始周期中除以衰减调整因子,以考虑相对权重失衡(将 EWMA 视为移动平均)。
当 ``adjust=True``(默认值)时,EW 函数使用权重 \(w_i = (1 - \alpha)^i\) 计算。例如,序列 [\(x_0, x_1, ..., x_t\) ] 的 EW 移动平均为:
\[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``(默认值)时,权重基于绝对位置。例如,在计算 [:math:`x_0` None, :math:`x_2` ] 的最终加权平均值时,:math:`x_0` 和 :math:`x_2` 的权重为 :math:`(1-\alpha)^2` 和 :math:`1` (如果 ``adjust=True),或者 \((1-\alpha)^2\) 和 \(\alpha\) (如果adjust=False)。当
ignore_na=True时,权重基于相对位置。例如,在计算 [\(x_0\) None, \(x_2\) ] 的最终加权平均值时,\(x_0\) 和 \(x_2\) 的权重为 \(1-\alpha\) 和 \(1\) (如果adjust=True),或者 \(1-\alpha\) 和 \(\alpha\) (如果adjust=False)。
- axis{0, 1},默认为 0
如果为
0或'index',则沿行计算。如果为
1或'columns',则沿列计算。对于 Series,此参数未使用,默认为 0。
- timesnp.ndarray、Series,默认 None
仅适用于
mean()。对应于观测值的时间。必须是单调递增且 dtype 为
datetime64[ns]。如果是一维类数组,则是一个与观测值形状相同的序列。
- <strong>method</strong>str {‘single’, ‘table’},默认为 ‘single’
在 1.4.0 版本加入.
按单列或单行(
'single')执行滚动操作,或对整个对象('table')执行滚动操作。此参数仅在方法调用中指定
engine='numba'时实现。仅适用于
mean()
- Returns:
- pandas.api.typing.ExponentialMovingWindow
Notes
有关更多用法详细信息和示例,请参阅 Windowing Operations 。
Examples
>>> 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
adjust
>>> 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
times
指数加权平均,权重根据相对于
times的时间差halflife计算。>>> 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