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

Python pandas用10年滚动平均值计算未来5年月度预测值

实现方案

核心思路是按月份拆分数据独立处理,每个月份的预测仅依赖同月份的历史值+已生成的预测值,计算逻辑简单且运行效率极高:

  1. 先把原始数据的日期列转换为日期格式,拆分出年份、月份字段
  2. 按月份分组,对每个月份的数值序列,逐年生成预测值:每次取最近10个值计算平均值作为当年预测值,再把预测值加入该月份的数值序列供后续年份计算使用
  3. 合并所有月份的预测结果,按日期排序得到最终输出

完整代码示例

import pandas as pd
import numpy as np

# 读取原始数据(替换为你自己的读入逻辑,比如pd.read_csv)
# df = pd.read_csv("your_data.csv")

# 预处理日期字段
df["Date"] = pd.to_datetime(df["Date"])
df["year"] = df["Date"].dt.year
df["month"] = df["Date"].dt.month

pred_result = []
# 配置要预测的年份范围
pred_year_range = range(2020, 2026)

# 遍历所有月份处理,如果只需要原始数据中存在的月份,可替换为 df["month"].unique()
for month in range(1, 13):
    # 取出当前月份的历史值,按年份升序排列
    month_history = df[df["month"] == month].sort_values("year")["Value"].tolist()
    for pred_year in pred_year_range:
        # 取最近10个值计算平均值
        current_pred = np.mean(month_history[-10:])
        # 存入结果
        pred_result.append({
            "Date": f"{pred_year}-{str(month).zfill(2)}",
            "Value": round(current_pred, 1)  # 可根据需要调整精度,比如保留整数就改为round(current_pred)
        })
        # 把预测值加入历史序列,供后续年份计算使用
        month_history.append(current_pred)

# 生成最终预测df,按日期排序
pred_df = pd.DataFrame(pred_result).sort_values("Date").reset_index(drop=True)

注意事项

  • 如果原始数据中某月份的历史值不足10年,代码会自动用全部现有历史值计算平均,若需要严格限制必须满10年才计算,可以自行增加长度判断逻辑
  • 若不需要生成1-12月所有月份的预测,仅保留原始数据中存在的月份,把遍历月份的代码改为for month in df["month"].unique():即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:12:02