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

基于Pandas实现库存数据按日迭代生成与合并的问题求助

解决Pandas库存预测的循环生成问题

原代码的核心问题有两个:

  1. 每次循环都从原始DataFrame复制,导致日期始终是原始日期+1天,无法实现逐日累加;
  2. 新行的Open Stock始终取原始数据的Close Stock,没有用上一次循环的库存值更新。

另外注意:原数据列名是Open Stock(带空格),但代码里用了OpenStock,需要统一列名避免报错。


方式一:循环逐行生成(灵活适配后续逻辑变化)

适合后续可能调整每日销量、SKU等变量的场景:

import pandas as pd

# 1. 初始化原始数据并处理日期格式
original_data = {
    'SKU': ['AAA'],
    'Date': ['4/01/23'],
    'Open Stock': [100],
    'Daily Sales': [-10],
    'Close Stock': [90]
}
original_df = pd.DataFrame(original_data)
# 转换日期列为datetime类型,确保可以正确加减天数
original_df['Date'] = pd.to_datetime(original_df['Date'], format='%d/%m/%y')

# 2. 初始化存储列表,先加入原始数据
df_list = [original_df.copy()]

# 3. 设置要生成的后续天数X(示例生成4天,最终共5行数据)
X = 4

# 4. 保存上一行的关键数据(SKU和每日销量固定,直接复用)
last_close = original_df['Close Stock'].iloc[0]
last_date = original_df['Date'].iloc[0]
fixed_sku = original_df['SKU'].iloc[0]
fixed_sales = original_df['Daily Sales'].iloc[0]

# 5. 循环生成后续每日数据
for _ in range(X):
    # 计算新日期
    new_date = last_date + pd.Timedelta(days=1)
    # 新开盘库存 = 上一日收盘库存
    new_open = last_close
    # 新收盘库存 = 新开盘库存 + 当日销量
    new_close = new_open + fixed_sales
    
    # 生成当日DataFrame
    daily_df = pd.DataFrame({
        'SKU': [fixed_sku],
        'Date': [new_date],
        'Open Stock': [new_open],
        'Daily Sales': [fixed_sales],
        'Close Stock': [new_close]
    })
    
    # 加入列表并更新上一行数据
    df_list.append(daily_df)
    last_close = new_close
    last_date = new_date

# 6. 合并所有DataFrame并重置索引
final_df = pd.concat(df_list, ignore_index=True)
# 可选:将日期转回原格式(dd/mm/yy)
final_df['Date'] = final_df['Date'].dt.strftime('%d/%m/%y')

print(final_df)

方式二:批量生成(适合销量固定的场景,更高效)

如果每日销量固定,无需逐行循环,直接生成序列即可:

import pandas as pd

original_data = {
    'SKU': ['AAA'],
    'Date': ['4/01/23'],
    'Open Stock': [100],
    'Daily Sales': [-10],
    'Close Stock': [90]
}
original_df = pd.DataFrame(original_data)
start_date = pd.to_datetime(original_df['Date'].iloc[0], format='%d/%m/%y')

X = 4  # 后续要生成的天数
total_days = X + 1  # 包含原始数据的总天数

# 生成日期序列
date_seq = pd.date_range(start=start_date, periods=total_days, freq='D').strftime('%d/%m/%y')
# 生成开盘库存序列:从100开始,每日减10(因为销量固定-10)
open_seq = [100 + (-10)*i for i in range(total_days)]
# 生成收盘库存序列:开盘库存+当日销量
close_seq = [os + (-10) for os in open_seq]

# 构建最终DataFrame
final_df = pd.DataFrame({
    'SKU': ['AAA']*total_days,
    'Date': date_seq,
    'Open Stock': open_seq,
    'Daily Sales': [-10]*total_days,
    'Close Stock': close_seq
})

print(final_df)

两种方式运行后都会得到你需要的完整库存数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:30:21