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

基于两个数据集创建周度库存水平表的技术问询

解决周度库存水平表空值问题的可行方案

一、先统一数据集结构与字段定义

首先修正第二个数据集的列名错误(原列名标注混乱):

  • 第一个数据集字段:Item Number(物品编号)、Date(日期)、Inventory(当日库存结存)
  • 第二个数据集修正后字段:Item Number(物品编号)、Date(入库日期)、Total Item Qty(当日入库数量)

二、核心调整思路:补全时间维度,避免空值

直接分组透视出现大量空值的原因是:部分物品在某些周没有数据,导致透视表对应位置缺失。解决关键是先生成完整的周日期序列,再为每个物品补全所有周的记录(无数据则填充0)。

步骤1:生成目标时间范围内的完整周序列

以最早日期2023-06-17为起点,生成3个月内所有周的标识(格式为YYYY-WXX):

import pandas as pd

# 定义时间范围
start_date = pd.to_datetime("2023-06-17")
end_date = start_date + pd.DateOffset(months=3)

# 生成每周一的日期,并转换为周标识
weekly_dates = pd.date_range(start=start_date, end=end_date, freq="W-MON")
weekly_labels = weekly_dates.strftime("%Y-W%U")

步骤2:处理数据集,映射周标识

将两个数据集的日期字段转换为对应的周标识:

# 处理第一个数据集(库存结存)
df1["Date"] = pd.to_datetime(df1["Date"])
df1["Week"] = df1["Date"].dt.strftime("%Y-W%U")

# 处理第二个数据集(入库数量,先修正列名)
df2.columns = ["Item Number", "Date", "Total Item Qty"]
df2["Date"] = pd.to_datetime(df2["Date"])
df2["Week"] = df2["Date"].dt.strftime("%Y-W%U")

步骤3:生成全量索引,填充空值

通过物品编号和周标识的笛卡尔积,生成所有可能的组合,再将原数据重新索引到这个全量索引上,空值填充为0:

# 获取所有唯一物品编号和周标识
all_items = pd.Series(pd.concat([df1["Item Number"], df2["Item Number"]]).unique(), name="Item Number")
all_weeks = pd.Series(weekly_labels, name="Week")

# 生成笛卡尔积全量索引
full_index = pd.MultiIndex.from_product([all_items, all_weeks], names=["Item Number", "Week"])

# 分组求和后重新索引,填充空值为0
df1_grouped = df1.groupby(["Item Number", "Week"])["Inventory"].sum().reindex(full_index, fill_value=0)
df2_grouped = df2.groupby(["Item Number", "Week"])["Total Item Qty"].sum().reindex(full_index, fill_value=0)

步骤4:计算周度库存并生成透视表

根据业务逻辑计算周度库存(示例为库存结存+当期入库,需根据实际业务调整,比如滚动库存要用上期结存),再生成透视表:

# 合并计算周度库存
weekly_inventory = pd.DataFrame({
    "Weekly_Inventory": df1_grouped + df2_grouped
}).reset_index()

# 生成透视表
pivot_result = weekly_inventory.pivot(index="Item Number", columns="Week", values="Weekly_Inventory")

三、原思路的问题与调整点

原思路(直接分组透视)的问题是没有补全时间维度的缺失值,导致透视表出现大量空值。调整核心:

  • 必须先构建完整的周时间序列,确保每个物品都覆盖所有周
  • 用笛卡尔积生成全量的物品-周组合,避免数据缺失
  • 空值统一填充为0(或符合业务逻辑的默认值)后再做透视

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:08:21