【发布时间】:2020-07-21 00:28:14
【问题描述】:
好的,所以我需要帮助和/或建议如何解决材料树的准时/延迟问题。
我有一个 pandas 数据框,其中包含材料树(['Tree'])、该树内的不同级别(['Level'])、零件编号(['Part #'])、预定的开始日期(['计划开始']) 和计划完成日期 (['Sched Fin'])。
import pandas as pd
data = {'Tree': [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3],
'Level': [1, 2, 2, 3, 1, 2, 3, 4, 1, 2, 3, 2, 3, 2],
'Part #': ['11', '12A', '12B', '12B3',
'21', '22A', '22A3', '22A4',
'31', '32A', '32A3', '32B', '32B3', '32C'],
'Sched Start': pd.to_datetime(['12/01/2020', '11/01/2020', '11/01/2020', '10/01/2020',
'12/01/2020', '11/01/2020', '10/01/2020', '09/01/2020',
'12/01/2020', '11/01/2020', '10/01/2020', '11/01/2020', '10/01/2020', '11/01/2020']),
'Sched Fin': pd.to_datetime(['12/15/2020', '11/15/2020', '12/02/2020', '11/02/2020',
'12/15/2020', '11/15/2020', '11/02/2020', '09/15/2020',
'12/15/2020', '11/15/2020', '10/15/2020', '11/15/2020', '10/15/2020', '11/15/2020'])
}
df = pd. DataFrame(data)
正常的物料流是物料供给下一个更高的组件。例如,第 3 级项目馈入第 2 级项目。 2 级项目为 1 级项目提供食物(1 级是不提供任何东西的顶部/最终组件)。可能有多个级别 2 馈送单个级别 1。多个级别 3 馈送单个级别 2 等等。因此在上面的示例代码中(对于树 1):12B3 馈送到 12B,12A 和 12B 馈送到 11。
无论如何,我需要添加另一列,其中包含一个项目的完成日期与其下一个更高组件的开始日期的比较数据。回到我们上面的例子。第 3 级部分 12B3 的完成日期为 2020 年 2 月 11 日 - 它提供了开始日期为 2020 年 11 月 1 日的 12B:12B3 是迟到的。查看日期,12B 会迟到,12A 会准时。
较低的组件将始终位于较高的组件之下。
清如泥,对吧?
我尝试过的:
好吧,我对遍历每一行的循环进行了一次可怕的尝试。如果前一行级别>当前行级别,它会获取级别值,然后转到下一行,它将当前行“Sched Fin”与前一行“Sched Start”进行比较并取得一点成功。当然,当序列中有相同级别的项目(例如两个级别 2)时,这一切都会爆炸。
任何帮助将不胜感激。
** 编辑 ** 树是相互独立的。不像关卡那样捆绑在一起。
【问题讨论】:
-
Pandas 非常适合矩阵运算,但可能不适合您的用例。如果您的生产流程是确定性的,那么您应该可以使用 2-3 个类(Tree、Level、Part)和一个循环。如果你一直以表格的形式思考这个问题,你就会让自己变得比必要的更困难。如果你想走这条路,我可以发布一个简单的例子。
-
任何事情都将不胜感激,我已经盯着这个问题看了一段时间了。我尝试过的每个循环都可能过于复杂。
标签: python pandas datetime python-class