我有一个多行的panda数据框。每行中有一个对象和在某台机器上加工的持续时间(有开始时间和结束时间)。每个对象可以在几台机器上连续加工。我需要找到所有作业的实际持续时间。例如:
| 对象|机器|T启动|T端|
| - ------|- ------|- ------|- ------|
| 1个|A类|十七点二十六分|十七点五十七分|
| 1个|乙|十七点二十六分|十八点三十三分|
| 1个|C级|十八点五十六分|十九点四十六分|
| 第二章|A类|14点整|15点整|
| 第二章|C级|十四点半|15点整|
| 三个|A类|十二点整|十二点半|
| 三个|C级|13点整|十三点四十五分|
对象1的实际持续时间是117分钟,对象2是60分钟,对象3是75分钟。我尝试使用groupby,计算每个对象的进程持续时间之和以及最小值和最大值,即第一个开始和最后一个结束。然后我编写了一个函数来比较这些值 但它不适用于对象1,它适用于对象2和3。以下是我的解决方案:
| 对象|最小值|最大值|和T|LT_实际|
| - ------|- ------|- ------|- ------|- ------|
| 1个|十七点二十六分|十九点四十六分|一百四十八|140错误!|
| 第二章|14点整|15点整|九十|六十好!|
| 三个|十二点整|十三点四十五分|七十五|75好!|
def calc_lead_time(min_t_start, max_t_end, t_sum):
t_max_min = (max_t_end - min_t_start) / pd.Timedelta(minutes=1)
if t_max_min <= t_sum:
return t_max_min
else:
return t_sum
df['LT_ACTUAL'] = df.apply(lambda x : calc_lead_time(x['min'], x['max'], x['sumT']), axis=1)
我发布了一张图片来解释所有的情况。我需要计算任务之间的实际持续时间
2条答案
按热度按时间cu6pst1q1#
假设数据按开始时间排序,并且一个任务工期不完全在另一个任务工期内,则可以使用:
输出:
对于分钟:
输出:
处理重叠间隔
有关重叠间期分组的逻辑,请参见here。
输出:
使用的输入:
9rnv2umw2#
输出: