原始问题
我遇到了以下问题。我想弄清楚车辆在工厂停留的时间和持续时间。我有一个Excel表格,其中存储了所有的交付路线或维护事件。最终目标是获得一个数据框,其中给出了车辆注册编号、到达工厂的时间以及在那里花费的时间(包括维护操作)。对于有兴趣的人来说,这是因为我最终希望能够安排非关键性的车辆维护操作。
我的数据框示例:
Registration RoutID Date Dep Loc Arr Loc Dep Time Arr Time Days
0 XC66 A58 20/May/17 Home Loc A 10:54 21:56 0
1 XC66 A59 21/May/17 Loc A Home 00:12 10:36 0
2 XC66 A345 21/May/17 Home Loc B 12:41 19:16 0
3 XC66 A346 21/May/17 Loc B Loc C 20:50 03:49 1
4 XC66 A347 22/May/17 Loc C Home 06:10 07:40 0
5 XC66 #M1 22/May/17 Home Home 10:51 13:00 0
我创建了一个脚本,其中所有日期和时间都被处理成正确的到达时间和离开时间的datetime列。针对维护期:"Dep Loc" = Home 和 "Arr Loc" = Home,使用以下代码来单独选择相关行:
df_home = df[df["Dep Loc"].isin(["Home"])]
df_home = df_home[df_home["Arr Loc"].isin(["Home"])]
从这里开始,我可以轻松地减去日期以创建持续时间列。
到目前为止还不错。然而,我在计算其他时间方面卡住了。这是因为可能会有中间停留,所以.shift()函数不起作用,因为要移动的行数不是恒定的。
我尝试搜索这个问题,但我只能找到移位解决方案,或者基于内部事件时间而不是事件之间时间的答案。
任何指导都将不胜感激!
问候
解决方案尝试
我已经卡在这个问题上一段时间了,但在发布这个问题后不久,我尝试了这个解决方案:
for idx, loc in enumerate(df["Arr Loc"]):
if loc == "Home":
a = ((idx2, obj) for idx2, obj in enumerate(df["Dep Loc"]) if (obj == "Home" and idx2 > idx))
idx_next = next(a)
idx_next = idx_next[0]
Arrival_times = df["Arr Time"]
Departure_times = df["Dep Time"]
Duration = Arrival_times[idx] - Departure_times[idx_next]
我使用了next函数来查找Home下一次出现的位置,作为起始位置(即车辆离开基地的时间)。随后,我减去两个日期以找到正确的时间差。
这对于小数据集有效,但对于整个数据集仍然无法运行。