You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Pandas EWMA计算结果匹配在线EWMA计算器?

指数移动平均(EMA)计算结果差异问题

问题描述

我的Python代码如下:

import pandas as pd
df = pd.DataFrame({'values': [345,373,373,359,376,376,413,383,467,464,540,628,545,631,617,607,590,576,565,617]})
ewm = df['values'].ewm(span=7, adjust=False).mean()
ewm

运行结果:

0     345.000000
1     352.000000
2     357.250000
3     357.687500
4     362.265625
5     365.699219
6     377.524414
7     378.893311
8     400.919983
9     416.689987
10    447.517490
11    492.638118
12    505.728588
13    537.046441
14    557.034831
15    569.526123
16    574.644592
17    574.983444
18    572.487583
19    583.615687

但使用相同输入值和周期(span=7)的在线计算器给出结果:

363.667,366,367.75,365.563,368.172,370.129,380.847,381.385,402.789,418.092,448.569,493.427,506.32,537.49,557.367,569.776,574.832,575.124

请问为何结果存在差异?如何修改代码使其结果与在线计算器匹配?


解答

差异原因

Pandas的ewm方法与在线计算器的结果差异,核心源于两点:

  1. 初始值计算逻辑不同:
    • Pandas默认将第一个原始数据作为EMA的初始值,从第二个数据开始按递推公式计算。
    • 多数在线计算器会先计算前span个数据的**简单移动平均(SMA)**作为EMA的初始值,再从第span+1个数据开始计算后续EMA。
  2. 平滑系数α的定义差异:
    • Pandas中span=N对应的平滑系数为α=2/(N+1),这是EMA的标准递推系数。
    • 部分在线工具可能使用α=1/N作为平滑系数,或者对系数的计算逻辑有特殊定义。

匹配在线计算器的代码修改

假设在线计算器采用「前span个数据的SMA作为初始值,使用α=2/(span+1)递推」的逻辑,可按以下代码修改:

import pandas as pd
import numpy as np

df = pd.DataFrame({'values': [345,373,373,359,376,376,413,383,467,464,540,628,545,631,617,607,590,576,565,617]})
span = 7
alpha = 2 / (span + 1)

# 计算初始EMA:前span个值的简单移动平均
initial_ema = df['values'].iloc[:span].mean()

# 初始化EMA序列,前span-1个位置为NaN,第span个位置设为初始值
ema_series = pd.Series([np.nan] * len(df))
ema_series.iloc[span-1] = initial_ema

# 从第span+1个数据开始递推计算EMA
for i in range(span, len(df)):
    ema_series.iloc[i] = alpha * df['values'].iloc[i] + (1 - alpha) * ema_series.iloc[i-1]

# 输出保留三位小数的结果,与在线计算器格式对齐
print(ema_series.dropna().round(3))

如果上述代码仍不匹配,可尝试调整初始值的计算范围(比如前3个数据的SMA)或修改α的取值(如alpha=1/span),直到结果与在线计算器一致。


内容的提问来源于stack exchange,提问作者Ray Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:19:51