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)计算。
只有一个参数:
com
,span
,halflife
,或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
子类
注意事项
看见 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