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

求与Python pandas ewma功能等价的Julia实现方法

在Julia中实现与Pandas ewma等价的指数加权移动平均

你需要的是和Pandas中ewm().mean()行为完全一致的Julia实现——从序列第一个元素开始计算,返回与原序列长度相同的结果,而非MarketTechnicals.ema()那种截断初始值的输出。以下是两种可行方案:

方案1:直接使用Pandas.jl调用Pandas原生功能

Pandas.jl可以让你在Julia中无缝调用Pandas的API,完全复现Python端的计算结果:

  1. 首先安装Pandas.jl:
using Pkg
Pkg.add("Pandas")
  1. 编写代码复现你的示例:
using Pandas

# 创建测试数据
data = Dict("val" => [1, 2, 3, 4, 5, 6])
df = pd.DataFrame(data)

# 计算对应你Python示例中m=3的指数加权移动平均
ewma_result = df.val.ewm(com=3).mean()

# 输出结果
println(ewma_result)

运行后会得到和Python完全一致的输出:

0    1.000000
1    1.571429
2    2.189189
3    2.851429
4    3.555698
5    4.299079
Name: val, dtype: float64

注:若需要对应Pandas旧版ewma()的span参数,只需将com=3替换为span=3即可,具体参数映射可参考Pandas官方规则。

方案2:纯Julia实现(不依赖Python)

如果不想引入Pandas依赖,可以自己实现Pandas ewm(adjust=True)的默认计算逻辑:

function pandas_ewma(x; com)
    α = 1.0 / (com + 1.0)  # 对应Pandas com参数的衰减系数
    n = length(x)
    result = similar(x, Float64)
    
    # 初始化第一个值
    result[1] = x[1]
    sum_weights = 1.0
    sum_weighted = x[1]
    
    # 迭代计算后续值
    for t in 2:n
        sum_weights = sum_weights * (1 - α) + 1.0
        sum_weighted = sum_weighted * (1 - α) + x[t]
        result[t] = sum_weighted / sum_weights
    end
    
    return result
end

# 测试示例
data = [1, 2, 3, 4, 5, 6]
result = pandas_ewma(data; com=3)
println(result)

输出结果:

[1.0, 1.5714285714285714, 2.189189189189189, 2.8514285714285716, 3.555698324022346, 4.299078341013825]

这个函数通过累积权重和与加权值和的比值,逐步计算每个位置的指数加权平均,确保从第一个元素开始输出完整长度的结果,完全匹配Pandas的计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:15:00