如何用Python基于平均增长量计算并追加预测值?
Python迭代实现销量预测:循环追加DataFrame行的解决方案
问题背景
作为Python新手,正在自动化公司基础流程,其中一项基础销量预测逻辑为:将数值平均增长量加到上月销量得到下月预测值,通过迭代实现长期预测。已完成以下工作:
- 创建包含历史销量数据的DataFrame
- 定义了获取DataFrame最后一行的变量
- 计算出数值平均增长量
需要实现的流程:
- 计算下一月的月份(当前最新月份+1)、下一月销量(当前最新销量+平均增长量)
- 将计算结果作为新行追加到主DataFrame,此时该行成为新的最新行
- 重复上述步骤,持续基于最新数据计算
当前无法实现循环追加并基于新数据再次计算的逻辑,需要解决。
数据与现有代码
历史数据初始化代码:
import pandas as pd import numpy as np # 创建DataFrame data = [[2022, 1, 512116, np.nan], [2022, 2, 524775, -1.73], [2022, 3, 600017, 19.88]] df = pd.DataFrame(data, columns=['year', 'month', 'volume', 'volume_growth'])
平均增长量计算代码:
# 计算平均增长率百分比 avg_vol_growth = df['volume_growth'].mean() # 转换为小数形式的增长率 avg_vol_growth_int = avg_vol_growth / 100 # 获取最新一行数据 latest_row = df.tail(1) # 计算月度数值平均增长量 numerical_avg_growth = np.sum(((latest_row['volume'])*avg_vol_growth_int)/12)
解决方案:循环迭代追加预测行
核心是通过for循环控制预测的月份数,每次迭代时基于当前DataFrame的最新数据计算新行,再追加到DataFrame中。同时处理跨年的月份进位逻辑:
# 设置需要预测的月份数量(比如预测3个月:4、5、6月) forecast_months = 3 for _ in range(forecast_months): # 获取当前最新一行数据(用iloc[-1]直接取单行数据,更方便提取值) latest = df.iloc[-1] # 计算新月份和年份 new_month = latest['month'] + 1 new_year = latest['year'] # 处理跨年:如果月份超过12,重置为1,年份+1 if new_month > 12: new_month = 1 new_year += 1 # 计算新销量:最新销量 + 平均增长量 new_volume = latest['volume'] + numerical_avg_growth # 构造新行(注意保持列顺序和原有一致,volume_growth列留空) new_row = pd.DataFrame({ 'year': [new_year], 'month': [new_month], 'volume': [new_volume], 'volume_growth': [np.nan] }) # 将新行追加到原DataFrame df = pd.concat([df, new_row], ignore_index=True) # 查看结果 print(df[['year', 'month', 'volume']])
代码关键说明
- 循环控制:用
range(forecast_months)指定要预测的月份数,灵活调整预测周期 - 最新数据获取:
df.iloc[-1]直接获取DataFrame最后一行的Series对象,比tail(1)更方便提取单个字段的值 - 跨年处理:新增了月份超过12时的年份进位逻辑,避免出现13月之类的无效数据
- 追加行方式:使用
pd.concat替代append(append在pandas 2.0+已被标记为过时),更稳定可靠 - 索引重置:
ignore_index=True确保追加后DataFrame的索引连续,避免索引重复问题
预期输出
执行后会得到包含预测数据的DataFrame,示例如下:
year month volume 0 2022 1 512116.000000 1 2022 2 524775.000000 2 2022 3 600017.000000 3 2022 4 600767.708333 4 2022 5 601518.416667 5 2022 6 602269.125000
内容的提问来源于stack exchange,提问作者lilyf96
相关产品推荐
相关产品推荐

