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

如何在Pandas中动态计算前X日收盘价均值并写入新增列

Pandas动态计算X日收盘价均值实现方案

核心实现直接调用Pandas内置的滚动窗口方法即可,无需手动写循环,支持动态传入天数参数,性能远高于自行实现的循环逻辑。


两种常用计算场景实现

1. 计算包含当前交易日在内的最近X日收盘价均值(和你原有硬编码2日均值效果完全一致)

核心代码:

df['avg'] = df['Close'].rolling(window=days).mean()

2. 计算不含当前交易日的纯前X日收盘价均值

核心代码:

df['avg'] = df['Close'].rolling(window=days).mean().shift(1)

如果你需要的是指数移动平均(EMA,和你方法名GetEMA对应)

核心代码:

df['avg'] = df['Close'].ewm(span=days, adjust=False).mean()

修正后的完整可运行代码

import pandas as pd
import os
import sys
import NasdaqTickerSymbols as nts    
class MY_PANDA_INDICATORS():
    
    def __init__(self, days, csvFile):
        self.days = days
        self.csvFile = csvFile
        self.df = self.GetDataFrame() # 初始化时直接读取数据存入实例属性

    def GetDataFrame(self):
        modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
        datapath = os.path.join(modpath, "CSV", self.csvFile + ".csv") # 用os.path.join拼接路径适配多系统
        df = pd.read_csv(datapath)
        return df    

    def GetSMA(self): # 简单移动平均,和你原来的计算逻辑匹配
        self.df['avg'] = self.df['Close'].rolling(window=self.days).mean()
        return self.df
    
    def GetEMA(self): # 指数移动平均,对应方法名原本的用途
        self.df['avg'] = self.df['Close'].ewm(span=self.days, adjust=False).mean()
        return self.df
    

myD = MY_PANDA_INDICATORS(2, nts.matches[0])
print(myD.GetSMA()) # 调用后输出的结果和你贴的样例完全一致

效果验证

当传入days=2调用GetSMA时,输出结果和你原有硬编码实现的结果完全匹配:

  • 第0行数据不足2个,返回NaN
  • 第1行均值为 (1.12+1.13)/2=1.125
  • 后续行计算逻辑完全符合你原有的预期,修改days参数即可直接计算任意天数的均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:01