【发布时间】:2018-03-09 14:17:05
【问题描述】:
我目前正在开发一个“restocker”模拟器,它从与实际不同的库存位置开始,接收实际销售的每日输入,并且必须执行 3 项任务:
- 在今天销售后更新所有商店所有商品的库存状况
- 验证当前库存头寸是否已达到“重新库存点”(全部库存头寸的 85%)
- 计算
LEAD_TIME之后所有商店的所有商品的补货(每个商店都有不同的LEAD_TIME)
首先,我将列出你们需要了解的所有概念:
GRID- 可以描述为“股票目标”的最大股票头寸。 在运营的第一天,库存仓位等于GRID,补货将始终尝试将库存仓位恢复到GRID为简化起见,我们将使用固定的 GRID,但实际上该 GRID 应该是动态的,并在每次补货后重新计算
SIM_SALES = SALESSIM_STOCK(day n) = SIM_STOCK(day n-1) - SALES(day n) + RESTOCK(day n)- 如果
SIM_STOCK - SALES <= 0,则当天的SALES也将被假定为零。
DataFrame 的结构类似于这样(例如 ONE ITEM - ONE STORE)并包含实际值:
INDEX ITEM STORE STOCK(UN) SALES(UN) DAY LEAD_TIME GRID
0 4058855 1000 173 0 1 5 55
1 4058855 1000 172 1 2 5 55
2 4058855 1000 163 9 3 5 55
3 4058855 1000 149 14 4 5 55
类似地,我们的模拟网格在第一天会是这样的:
INDEX ITEM STORE STOCK(UN) SALES(UN) DAY LEAD_TIME GRID KEY RESTOCK COUNTER
0 4058855 1000 55 0 1 5 55 False 0 0
1 4058855 1000 0 0 2 5 55 False 0 0
2 4058855 1000 0 0 3 5 55 False 0 0
3 4058855 1000 0 0 4 5 55 False 0 0
我正在寻找的是:
INDEX ITEM STORE SIM_STOCK(UN) SIM_SALES(UN) DAY LEAD_TIME GRID KEY RESTOCK COUNTER
0 4058855 1000 55 0 1 5 55 False 0 0
1 4058855 1000 54 1 2 5 55 False 0 0
2 4058855 1000 45 9 3 5 55 True 0 5
3 4058855 1000 31 14 4 5 55 True 0 4
4 4058855 1000 24 7 5 5 55 True 0 3
5 4058855 1000 15 9 6 5 55 True 0 2
6 4058855 1000 19 6 7 5 55 True 10 1
7 4058855 1000 11 8 8 5 55 True 0 5
8 4058855 1000 3 8 9 5 55 True 0 4
我已经通过 3 个步骤提出了解决方案:
- 将所有值(Stock、Sales、Key 和 Counter)保存在字典中。
- 在当天销售后更新所有值
- 重新计算所有字典值
由于代码繁琐复杂,我把整个笔记本发了where(里面有一个csv文件)
但重要的是,这是我得到的实际 DataFrame:
INDEX ITEM STORE SIM_STOCK(UN) SIM_SALES(UN) DAY LEAD_TIME GRID KEY RESTOCK COUNTER
0 4058855 1000 55 0 1 5 55 False 0 0
1 4058855 1000 54 1 2 5 55 False 0 0
2 4058855 1000 45 9 3 5 55 True 0 5
3 4058855 1000 31 14 4 5 55 True 0 4
4 4058855 1000 24 7 5 5 55 True 0 3
5 4058855 1000 15 9 6 5 55 True 0 2
6 4058855 1000 9 6 7 5 55 True 10 1
7 4058855 1000 1 8 8 5 55 True 0 5
8 4058855 1000 1 0 9 5 55 True 0 4
除了添加RESTOCK 之外,代码正在做所有事情。这是我添加RESTOCK并减去SALES的代码部分:
DF['SIM_STOCK'] = DF.apply(lambda row:(dict_est[(row['ITEM'],row['STORE'],row['DAY']-1)]
-row['SIM_SALES']
+row['RESTOCK'])
if row['DAY'] == CURRENT_DAY
else row['SIM_STOCK'],
axis=1)
如果两个操作都发生在同一行代码中,Pandas 怎么会做减法而不是加法?
【问题讨论】: