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

如何用pandas/Python实现符合先进先出规则的发货(Dispatch)列计算逻辑

实现逻辑

核心遵循「最早批次优先分配」规则,单商品总发货量严格不超过对应订单总量,具体逻辑如下:

  • 所有批次先按生产日期/入库时间升序排序,确保更早批次先被分配
  • 针对每类商品单独计算发货量,初始化剩余可发货额度=该商品总订单量
  • 逐行遍历排序后的批次数据:
    • 剩余额度为0时,当前批次该商品发货量填0
    • 剩余额度>0时,当前批次发货量取「本批次该商品的可出库数量」和「剩余可发货额度」的较小值,同步扣减剩余额度

代码实现(Python Pandas示例,以BUN商品为例)

import pandas as pd

# 示例数据,可替换为你的实际数据
# 假设数据列包含:批次ID、批次时间、商品类型、本批次可发量、总订单量
data = [
    ["P001", "2024-01-01", "BUN", 20, 60],
    ["P002", "2024-01-02", "BUN", 25, 60],
    ["P003", "2024-01-03", "BUN", 30, 60],
    ["P004", "2024-01-04", "BUN", 15, 60]
]
df = pd.DataFrame(data, columns=["batch_id", "batch_date", "sku", "available_qty", "total_order_qty"])

# 按批次时间升序排序,保证早批次优先
df = df.sort_values("batch_date").reset_index(drop=True)

remaining = df.loc[0, "total_order_qty"]
dispatch_list = []

for idx, row in df.iterrows():
    if remaining <= 0:
        dispatch = 0
    else:
        dispatch = min(row["available_qty"], remaining)
        remaining -= dispatch
    dispatch_list.append(dispatch)

df["Dispatch"] = dispatch_list
print(df)

输出示例

batch_idbatch_dateskuavailable_qtytotal_order_qtyDispatch
P0012024-01-01BUN206020
P0022024-01-02BUN256025
P0032024-01-03BUN306015
P0042024-01-04BUN15600

可以看到BUN的Dispatch列总和为20+25+15=60,刚好等于总订单量,且优先分配了更早的批次。


效果示例图

示例图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:07