Python pandas用10年滚动平均值计算未来5年月度预测值
实现方案
核心思路是按月份拆分数据独立处理,每个月份的预测仅依赖同月份的历史值+已生成的预测值,计算逻辑简单且运行效率极高:
- 先把原始数据的日期列转换为日期格式,拆分出年份、月份字段
- 按月份分组,对每个月份的数值序列,逐年生成预测值:每次取最近10个值计算平均值作为当年预测值,再把预测值加入该月份的数值序列供后续年份计算使用
- 合并所有月份的预测结果,按日期排序得到最终输出
完整代码示例
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
相关产品推荐
相关产品推荐

