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

使用Pandas补全DataFrame中各SKU全年12个月份的对应记录

Pandas DataFrame月份扩展补全实现方案

需求说明

针对SKU_ID、供应商、年份、UOM的唯一组合,补全每年1-12月的所有行,无原始数据的月份VOLUME和COST字段自动留空,支持多SKU批量处理。

实现代码

import pandas as pd

# -------------- 1. 构造样例输入数据(实际使用时替换为你的数据源读取代码即可) --------------
raw_data = [
    ["SKU_123a", "Supplier_8", 2020, 2, "Case", 12, "$101.36"],
    ["SKU_123a", "Supplier_8", 2020, 3, "Case", 72, "$101.36"],
    ["SKU_123a", "Supplier_8", 2020, 6, "Case", 36, "$101.36"],
    ["SKU_123a", "Supplier_8", 2020, 7, "Case", 36, "$101.36"],
    ["SKU_123a", "Supplier_8", 2020, 9, "Case", 36, "$101.36"],
    ["SKU_123a", "Supplier_8", 2020, 10, "Case", 72, "$101.36"],
    ["SKU_456b", "Supplier_21", 2020, 4, "Case", 32, "$10.36"],
    ["SKU_456b", "Supplier_21", 2020, 5, "Case", 2, "$10.36"]
]
df = pd.DataFrame(raw_data, columns=["SKU_ID", "SUPPLIER", "YEAR", "MONTH", "UOM", "VOLUME", "COST"])

# -------------- 2. 生成全量月份骨架 --------------
# 定义分组维度列
dim_cols = ["SKU_ID", "SUPPLIER", "YEAR", "UOM"]
# 提取所有不重复的维度组合
unique_dims = df[dim_cols].drop_duplicates()
# 生成1-12月序列
month_range = pd.DataFrame({"MONTH": range(1, 13)})
# 笛卡尔积生成每个维度组合的全年12月骨架
full_skeleton = unique_dims.merge(month_range, how="cross")

# -------------- 3. 关联原始数据补全数值 --------------
result = full_skeleton.merge(df, on=dim_cols + ["MONTH"], how="left")
# 按业务维度和月份排序
result = result.sort_values(by=dim_cols + ["MONTH"]).reset_index(drop=True)

# 若需要将空值替换为空白字符串,可取消注释下行代码
# result = result.fillna('')

# 输出结果
print(result)

代码说明

  • 自动适配多SKU、多供应商、多年份场景:无需手动指定维度值,代码会自动识别所有存在的唯一维度组合生成对应月份行
  • 空值处理:无原始数据的月份VOLUME和COST字段默认填充NaN,可根据需要调整为空字符串
  • 性能优化:10万级以下维度组合运行效率无压力,超大批量场景可提前过滤无效年份减少计算量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:06:00