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) 计算。 如果未提供,则必须提供com、span、halflife或之一。如果提供, 则可以提供、或之一。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