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

如何用Python基于平均增长量计算并追加预测值?

Python迭代实现销量预测:循环追加DataFrame行的解决方案

问题背景

作为Python新手,正在自动化公司基础流程,其中一项基础销量预测逻辑为:将数值平均增长量加到上月销量得到下月预测值,通过迭代实现长期预测。已完成以下工作:

  • 创建包含历史销量数据的DataFrame
  • 定义了获取DataFrame最后一行的变量
  • 计算出数值平均增长量

需要实现的流程:

  1. 计算下一月的月份(当前最新月份+1)、下一月销量(当前最新销量+平均增长量)
  2. 将计算结果作为新行追加到主DataFrame,此时该行成为新的最新行
  3. 重复上述步骤,持续基于最新数据计算

当前无法实现循环追加并基于新数据再次计算的逻辑,需要解决。

数据与现有代码

历史数据初始化代码:

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']])

代码关键说明

  1. 循环控制:用range(forecast_months)指定要预测的月份数,灵活调整预测周期
  2. 最新数据获取:df.iloc[-1]直接获取DataFrame最后一行的Series对象,比tail(1)更方便提取单个字段的值
  3. 跨年处理:新增了月份超过12时的年份进位逻辑,避免出现13月之类的无效数据
  4. 追加行方式:使用pd.concat替代append(append在pandas 2.0+已被标记为过时),更稳定可靠
  5. 索引重置: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:58:34