pandas.DataFrame.ewm #

数据框。ewm ( com = None , span = None , halflife = None , alpha = None , min_periods = 0 , adjustment = True , ignore_na = False , axis = _NoDefault.no_default , times = None , method = 'single' ) [来源] #

提供指数加权 (EW) 计算。

如果未提供,则必须提供comspanhalflife或之一。如果提供, 则可以提供、或之一。alphatimestimeshalflifecomspanalpha

参数
com浮动,可选

根据质心指定衰减

\(\alpha = 1 / (1 + com)\), 为了\(com \geq 0\)

跨度浮动,可选

根据跨度指定衰减

\(\alpha = 2 / (span + 1)\), 为了\(span \geq 1\)

halflife float、str、timedelta、可选

用半衰期指定衰减

\(\alpha = 1 - \exp\left(-\ln(2) / halflife\right)\), 为了 \(halflife > 0\)

如果times指定,则为 timedelta 可转换单位,在该单位内观测值衰减至其值的一半。仅适用于mean(),半衰期值不适用于其他函数。

阿尔法浮动,可选

指定平滑因子\(\alpha\)直接地

\(0 < \alpha \leq 1\)

min_periods int,默认0

窗口中需要有值的最小观测值数量;否则,结果为np.nan.

调整布尔值,默认True

除以开始期间的衰减调整因子,以考虑相对权重的不平衡(将 EWMA 视为移动平均值)。

  • adjust=True(默认)时,EW函数使用权重计算 \(w_i = (1 - \alpha)^i\)。例如,该系列的 EW 移动平均线 [\(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_na布尔值,默认 False

计算权重时忽略缺失值。

  • ignore_na=False(默认)时,权重基于绝对位置。例如,权重为\(x_0\)\(x_2\)用于计算 [ 的最终加权平均值\(x_0\), 没有任何,\(x_2\)] 是 \((1-\alpha)^2\)\(1\)如果adjust=True, 和 \((1-\alpha)^2\)\(\alpha\)如果adjust=False

  • 当 时ignore_na=True,权重基于相对位置。例如,权重为\(x_0\)\(x_2\) 用于计算 [ 的最终加权平均值\(x_0\), 没有任何,\(x_2\)] 是\(1-\alpha\)\(1\)如果 adjust=True, 和\(1-\alpha\)\(\alpha\)如果adjust=False

{0, 1},默认 0

如果0'index',则跨行计算。

如果1'columns',则跨列计算。

对于系列,此参数未使用,默认为 0。

times np.ndarray,系列,默认无

仅适用于mean().

与观察结果相对应的时间。必须单调递增且为 datetime64[ns]dtype。

如果是一维数组,则与观察结果具有相同形状的序列。

方法str {'single', 'table'}, 默认 'single'

1.4.0 版本中的新增功能。

'single'对单个列或行 ( ) 或整个对象 ( )执行滚动操作'table'

engine='numba' 仅当在方法调用中指定时才会实现此参数。

仅适用于mean()

返回
pandas.api.typing.ExponentialMovingWindow

也可以看看

rolling

提供滚动窗口计算。

expanding

提供扩展的转换。

笔记

有关更多使用详细信息和示例,请参阅窗口操作。

例子

>>> 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

忽略_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

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