pandas.DataFrame.ewm#

DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=0, times=None, method='single')[源代码]#

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

只有一个参数: comspanhalflife ,或 alpha 必须提供。

参数
com浮动,可选

根据质心指定衰退

\(\alpha = 1 / (1 + com)\) ,用于 \(com \geq 0\)

span浮动,可选

根据跨度指定衰减

\(\alpha = 2 / (span + 1)\) ,用于 \(span \geq 1\)

halflife浮点型、字符串、时间增量、可选

用半衰期表示衰变

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

如果 times 则为观测值衰减到其值的一半的时间单位(字符串或时间增量)。仅适用于 mean() ,并且半衰期值不适用于其他函数。

1.1.0 新版功能.

alpha浮动,可选

指定平滑系数 \(\alpha\) 直接直接

\(0 < \alpha \leq 1\)

min_periods整型,默认为0

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

adjust布尔值,默认为True

除以年初期间的递减调整系数,以说明相对权重的不平衡(将EWMA视为移动平均值)。

  • 什么时候 adjust=True (默认),使用权重计算EW函数 \(w_i = (1 - \alpha)^i\) 。例如,序列的EW移动平均值 [\(x_0, x_1, ..., x_t\)] 将是:

\[Y_t=\frac{x_t+(1-\α)x_{t-1}+(1-\α)^2 x_{t-2}+...+(1- \Alpha)^t x_0}{1+(1-\Alpha)+(1-\Alpha)^2+...+(1-\Alpha)^t}\]
  • 什么时候 adjust=False ,则以递归方式计算指数加权函数:

\[\begin{split}\Begin{拆分} Y_0&=x_0\\ Y_t&=(1-\α)y_{t-1}+\αx_t, \end{拆分}\end{split}\]
ignore_na布尔值,默认为False

计算权重时忽略缺少的值。

  • 什么时候 ignore_na=False (默认),权重基于绝对位置。例如,以下各项的权重 \(x_0\)\(x_2\) 用于计算的最终加权平均值 [\(x_0\), None, \(x_2\)] 是 \((1-\alpha)^2\)\(1\) 如果 adjust=True ,以及 \((1-\alpha)^2\)\(\alpha\) 如果 adjust=False

  • 什么时候 ignore_na=True ,权重基于相对位置。例如,以下各项的权重 \(x_0\)\(x_2\) 用于计算的最终加权平均值 [\(x_0\), None, \(x_2\)] 是 \(1-\alpha\)\(1\) 如果 adjust=True ,以及 \(1-\alpha\)\(\alpha\) 如果 adjust=False

axis{0,1},默认0

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

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

times字符串,np.ndarray,系列,默认无

1.1.0 新版功能.

仅适用于 mean()

与观测相对应的时间。必须是单调递增的 datetime64[ns] 数据类型。

如果一维阵列类似,则为与观测结果形状相同的序列。

1.4.0 版后已移除: 如果为str,则为DataFrame中表示时间的列的名称。

methodStr{‘Single’,‘TABLE’},默认为‘Single’

1.4.0 新版功能.

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

此参数仅在指定 engine='numba' 在方法调用中。

仅适用于 mean()

退货
ExponentialMovingWindow 子类

参见

rolling

提供滚动窗口计算。

expanding

提供扩展转换。

注意事项

看见 Windowing Operations 获取更多用法详细信息和示例。

示例

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

用时间增量计算的加权指数加权平均值 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