pandas.DataFrame.ewm#
- DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, times=None, method='single')[源代码]#
提供指数加权(EW)计算。
如果没有提供
times
,则必须提供com
、span
、halflife
或alpha
中的一个。如果提供了times
且adjust=True
,则可以提供halflife
和com
、span
或alpha
中的一个。如果提供了times
且adjust=False
,则halflife
必须是唯一提供的衰减规范参数。- 参数:
- com浮点数, 可选
以质心为单位指定衰减
\(\alpha = 1 / (1 + com)\), 对于 \(com \geq 0\)。
- span浮点数, 可选
以跨度形式指定衰减
\(\alpha = 2 / (span + 1)\), 对于 \(span \geq 1\).
- halflifefloat, str, timedelta, optional
以半衰期指定衰减
\(\alpha = 1 - \exp\left(-\ln(2) / halflife\right)\), 对于 \(halflife > 0\).
如果指定了
times
,则表示一个时间增量可转换单位,在此单位上观测值衰减到其一半的值。仅适用于mean()
,半衰期值不适用于其他函数。- alpha浮点数, 可选
直接指定平滑因子 \(\alpha\)
\(0 < \alpha \leq 1\).
- min_periodsint, 默认 0
窗口中所需的最小观测数以获得一个值;否则,结果为
np.nan
。- 调整布尔值, 默认为 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`\))。
- timesnp.ndarray, Series, 默认 None
仅适用于
mean()
。对应于观测的时间。必须是单调递增且为
datetime64[ns]
数据类型。如果是类似一维数组,则是一个与观测值具有相同形状的序列。
- 方法str {‘single’, ‘table’}, 默认 ‘single’
Added in version 1.4.0.
对每列或每行执行滚动操作(
'single'
)或对整个对象执行('table'
)。只有在方法调用中指定
engine='numba'
时,此参数才实现。仅适用于
mean()
- 返回:
- pandas.api.typing.ExponentialMovingWindow
一个用于进一步进行指数加权(EW)计算的 ExponentialMovingWindow 实例,例如使用
mean
方法。
参见
rolling
提供滚动窗口计算。
展开
提供扩展变换。
备注
有关进一步的使用细节和示例,请参见 窗口操作。
例子
>>> 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
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
的 timedeltahalflife
计算权重的指数加权平均。>>> 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