上下文
我有一个.csv工艺步骤,每个步骤都有一个完成日期和时间,但是它们的开始时间未知。我想确定这些流程中的项目到达部门的时间。这可以通过检查PredecessorProcessCode的“链”来计算
.csv字段的结构如下:
基本上,我想添加一个名为“ PreviousDepartmentFinishDateTime”的字段,以便能够确定流程的在制品数量,队列等。但是,“ PredecessorProcessCode”并不一定是上一个部门的结束时间,因为前任的前任可能早些开始,而后要结束。所以基本上,我的流程如下:
现在,这是我的问题: 我已经加载了400万行,并能够确定添加列“ PreviousDepartmentFinishDateTime”,但是每秒只能添加约500行,这意味着我现在等待2个小时以上才能添加新列。我必须提高此过程的速度,因为我们打算“在线”使用它。
上一个过程的步骤3似乎太慢了。每次查询大约需要2毫秒,导致等待时间长。
我现在有一个带有多索引ItemNumber-ProcessCode的df
代码段如下:
def prev_department_finished(row):
itemno, processcode = row.name
processcode_predecessors = processesbefore(processcode)
prevdepartment = row['PrevDepartment']
df_subset = df.loc[itemno].query('Department == @prevdepartment & ProcessCode in processcode_predecessors')['FinishDateTime']
if df_subset.empty: #if no preceding department
return row['ItemStartDateTime']
else:
return df_subset.max()
df['PrevDepartmentDone'] = df.apply(prev_department_finished, axis=1)
因此,我的主要问题是: