如何为pandas DataFrame计算Exponential moving average并生成新列
pandas计算指数移动平均(EMA)实现方案
pandas内置了ewm()(指数加权移动)方法,可以直接用来计算指数移动平均,无需引入额外第三方库。
核心实现逻辑
ewm()方法适配金融EMA计算场景的核心参数设置如下:
- 用
span参数指定EMA的计算周期,和你之前SMA的window参数逻辑一致 - 金融场景通用的EMA计算规则需要设置
adjust=False,此时平滑系数α=2/(span+1),符合绝大多数行情软件的EMA计算标准 min_periods参数和rolling()中的同名参数作用一致,设置为1时,即使序列长度不足窗口长度也会从第一个有效值开始计算
完整修改后的代码
import pandas as pd import datetime as dt import yfinance as yf # 获取初始参数 start = dt.date(2020,1,1) end = dt.date.today() ticker = 'SPY' # 下载行情数据 df = yf.download(ticker,start,end,progress=False) # 计算75周期简单移动平均 df['SMA'] = df['Adj Close'].rolling(window=75,min_periods=1).mean() # 计算75周期指数移动平均,和SMA窗口长度保持一致 df['EMA'] = df['Adj Close'].ewm(span=75, adjust=False, min_periods=1).mean() # 如需计算其他常用周期EMA,比如12、26周期(MACD指标常用参数),可直接新增对应列 df['EMA12'] = df['Adj Close'].ewm(span=12, adjust=False, min_periods=1).mean() df['EMA26'] = df['Adj Close'].ewm(span=26, adjust=False, min_periods=1).mean()
补充说明
如果需要自定义平滑系数,可以直接替换span参数为alpha参数手动指定数值,比如alpha=0.05,即可按照自定义的平滑系数计算EMA。
内容的提问来源于stack exchange,提问作者Faiz
相关产品推荐
相关产品推荐

