【发布时间】:2023-01-25 01:24:11
【问题描述】:
我有三个数据框:
-
ob (Orderbook) - 包含零件号、到期周和构建它们所需的时间的订单簿。
Part Number Due Week Build Hours A 2022-46 4 A 2022-46 5 B 2022-46 8 C 2022-47 1.6 -
osm(操作员技能矩阵)——包含操作员姓名和零件号的技能矩阵
Operator Part number Mr.One A Mr.One B Mr.Two A Mr.Two B Mrs. Three C -
ah(可用时间)- 包含操作员在给定一周内可以工作多少小时的列表
Operator YYYYWW Hours Mr.One 2022-45 40 Mr.One 2022-46 35 Mr.Two 2022-46 37 Mr.Two 2022-47 39 Mrs. Three 2022-47 40 Mrs. Three 2022-48 45
我正在尝试每周计算是否有足够多的操作员、具备合适的技能、工作时间足以完成订单簿上的所有订单。如果没有,请确定无法完成的订单。
一步一步看起来像这样:
- 取订单簿第一行的零件号。
- 搜索技能矩阵以查找可以构建该零件的操作员列表。
- 搜索营业时间列表并检查操作员在订单到期的那一周是否有可用的房屋。
- 如果操作员有可用时间,请将他们的名字添加到订单簿的那一行。
- 从 Avalible Hours df 中的 Available hours 中减去 orderbook 中的 Build hours。
- 对订单簿中的每一行重复此操作,直到所有订单都有对应的名称或没有剩余可用时间。
我唯一想尝试的是一堆嵌套的 for 循环,但是由于有数千行,完成一次迭代需要大约 45 分钟,并且需要几天甚至几周才能完成整个事情。
#for each row in the orderbook for i, rowi in ob_sum_hours.iterrows(): #for each row in the operator skill matrix for j, rowj in osm.iterrows(): #for each row in the avalible operator hours for y, rowy in aoh.iterrows(): if(rowi['Material']==rowj['MATERIAL'] and rowi['ProdYYYYWW']==rowy['YYYYWW'] and rowj['Operator']==rowy['Operator'] and rowy['Hours'] > 0):` rowy['Hours'] -=rowi['PlanHrs'] rowi['HoursAllocated'] = rowi['Operator']最终结果如下所示:
Part Number Due Week Build Hours Operator A 2022-46 4 Mr.One A 2022-46 5 Mr.One B 2022-46 8 Mr.Two C 2022-47 1.6 Mrs.Three 有没有更好的方法来实现这一目标?
【问题讨论】:
-
为什么一先生和二先生分配到预期输出的前三行?在
ahdataframe 中,它们没有在到期周(2022-46)中列出?另外,二先生不能按照osm框架搭建Part C。 -
只是想问同样的问题。一般而言,第 46 周根本不会出现在
ah中,这是由于不好的例子,还是只有几周没有操作员可用。 -
基于所有的框架,我相信预期的输出应该是
C,2022-47,1.6,Mrs. Three -
对不起,不好的例子,我已经更新了它以使其更清楚。
-
@jhew123 感谢更新,但二先生无法构建 C 部分。为什么二先生在 C 部分的预期输出中?