我是python和数据分析的新手,我正在做一项任务。
我有一个数据帧,它将时间序列和时间(分钟(作为整数,我想进行计算,其中时间和分钟给出另一个时间,这将显示技术人员被占用/不可用。
数据帧示例:
Date_Time Line Downtime Issue Owner
2020-05-08 18:39:00 T10 32 Reason 1 Technician2
2020-05-08 19:20:00 T10 65 Reason 2 Technician3
2020-05-08 21:13:00 T14 20 Reason 1 Technician1
2020-05-08 21:26:00 T12 12 Reason 4 Technician4
我总共有 16 名技术人员,他们按班次划分(第 1 和第 2 班(,所以我希望在 06:00 到 14:00 之间有 8 名可用的技术人员。
一旦生产中出现问题,就会有技术人员去解决它,所以我当时有 7 名技术人员可用。 同时,如果在第一个问题尚未解决的情况下发生另一个问题,那么我有 6 名技术人员可用。
"停机时间"列以分钟表示。
我想要的输出如下:
Date_Time Line Downtime Issue Owner Avail. Technicians
2020-05-08 18:39:00 T10 32 Reason 1 Technician2 7
2020-05-08 19:20:00 T10 65 Reason 2 Technician3 7
2020-05-08 21:13:00 T14 20 Reason 1 Technician1 7
2020-05-08 21:26:00 T12 12 Reason 4 Technician4 6
有可能达到这样的结果吗?
如果您有任何问题,请随时提问。我会尽力解释。
非常感谢!
您可以计算Done_Time
并将其与Date_Time
进行比较:
new_df = (df.assign(Done_time=df.Date_Time + pd.to_timedelta(df.Downtime, unit='min'))
.set_index('Owner',append=True)['Done_time']
.unstack('Owner')
.ffill()
)
num_busy = (df['Date_Time'].values[:,None] < new_df.values).sum(1)
df['Avail.Tech'] = 8 - num_busy
输出:
Date_Time Line Downtime Issue Owner Avail.Tech
0 2020-05-08 18:39:00 T10 32 Reason 1 Technician2 7
1 2020-05-08 19:20:00 T10 65 Reason 2 Technician3 7
2 2020-05-08 21:13:00 T14 20 Reason 1 Technician1 7
3 2020-05-08 21:26:00 T12 12 Reason 4 Technician4 6