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

如何基于Pandas按规则计算SKU的缺货天数?

计算SKU缺货天数的实现方案

需求说明

根据库存数据,需按以下规则计算每个SKU的缺货天数:

  • 若某SKU所有日期的Current_Stock < 1,缺货天数为该SKU的总记录天数(示例:SKU B)
  • 若某SKU存在补货记录(Current_Stock ≥1),则从最后一次补货日起,统计之后的缺货天数(示例:SKU C最后一次补货为7/29,之后无日期,缺货天数为0)

实现代码

import pandas as pd

# 原始数据
data = {'SKU': ['A', 'A', 'A', 'A',
                'B','B','B','B',
                'C','C','C','C',
                'D', 'D', 'D', 'D',
                'E', 'E', 'E', 'E',
                'F', 'F', 'F', 'F'],
        'Current_Stock': [2,0,0,0, 
                          0,0,-1,-1,
                          2,-1,0,1,
                          2,2,3,1,
                          2,0,0,1,
                          2,-1,1,0],
        'Date_Updated': ['2024/7/26', '2024/7/27','2024/7/28', '2024/7/29',
                         '2024/7/26', '2024/7/27','2024/7/28', '2024/7/29',
                         '2024/7/26', '2024/7/27','2024/7/28', '2024/7/29',
                         '2024/7/26', '2024/7/27','2024/7/28', '2024/7/29',
                         '2024/7/26', '2024/7/27','2024/7/28', '2024/7/29',
                         '2024/7/26', '2024/7/27','2024/7/28', '2024/7/29']}

df = pd.DataFrame(data)

# 转换日期列为日期类型,保证时间排序准确
df['Date_Updated'] = pd.to_datetime(df['Date_Updated'])

# 定义单个SKU的缺货天数计算逻辑
def calculate_oos_days(group):
    # 按日期排序,确保时间顺序正确
    sorted_group = group.sort_values('Date_Updated')
    # 筛选所有补货日期(库存≥1的记录)
    restock_dates = sorted_group[sorted_group['Current_Stock'] >= 1]['Date_Updated']
    
    if not restock_dates.any():
        # 无补货记录,缺货天数为总天数
        return len(sorted_group)
    else:
        # 取最后一次补货的日期
        last_restock_date = restock_dates.max()
        # 筛选最后一次补货之后的所有记录
        post_restock_records = sorted_group[sorted_group['Date_Updated'] > last_restock_date]
        # 统计补货后缺货的天数(库存<1的记录数)
        return len(post_restock_records[post_restock_records['Current_Stock'] < 1])

# 按SKU分组计算缺货天数
result = df.groupby('SKU').apply(calculate_oos_days).reset_index(name='Days_Out_of_Stock')

print(result)

逻辑解释

  1. 日期转换:将Date_Updated转为日期类型,避免字符串排序导致的时间顺序错误
  2. 分组处理:对每个SKU的记录单独计算:
    • 无补货记录的SKU:直接返回总记录数(总天数)
    • 有补货记录的SKU:找到最后一次补货日期,统计该日期之后库存<1的天数
  3. 结果匹配:最终输出结果与示例预期完全一致:
    SKUDays_Out_of_Stock
    A3
    B4
    C0
    D0
    E0
    F1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:49:57