我有一个包含两个DateTime Object列的数据框(一个代表正在计时的手术,另一个代表正在计时的手术)。对于每一行(即案例),我需要在工作时间(07:00-17:30)内创建一列总时间,并在工作时间之外创建另一列总时间。我不确定最好的方法。
我的数据框的可复制段:
Actual Room In DateTime Actual Room Out DateTime
0 2013-11-01 02:16 2013-11-01 04:35
1 2016-06-10 16:42 2016-06-10 19:28
2 2014-12-13 09:15 2014-12-13 10:55
3 2014-01-03 19:46 2014-01-03 22:54
4 2015-01-12 18:13 2015-01-12 19:58
5 2017-03-24 18:55 2017-03-24 19:57
6 2015-08-07 18:46 2015-08-07 19:42
7 2016-03-18 20:43 2016-03-19 00:40
8 2017-02-23 15:21 2017-02-23 17:35
9 2013-11-29 17:08 2013-11-29 17:42
10 2014-05-28 18:17 2014-05-28 19:12
11 2017-07-15 17:04 2017-07-15 18:19
12 2017-02-16 09:14 2017-02-16 21:29
13 2014-07-11 12:04 2014-07-11 17:40
14 2017-07-05 12:27 2017-07-05 20:08
15 2014-08-18 17:55 2014-08-18 19:50
16 2015-01-23 15:41 2015-01-23 19:41
17 2015-01-12 16:59 2015-01-12 17:49
18 2014-02-23 11:24 2014-02-23 15:06
19 2017-09-21 13:40 2017-09-21 18:11
pd.read_clipboard(sep=',')
两列之间的最长时间为:
df['Room Difference'] = df['Actual Room Out DateTime'] - df['Actual Room In DateTime']
max(df['Room Difference'])
Timedelta('1 days 01:17:00')
这可以帮助我考虑问题和要编写的算法。
我想它会变成这样(作为伪代码):
if 00:00:00 <= 'Actual Room In DateTime' < 07:00:00 and 00:00:00 <= 'Actual Room Out DateTime' < 07:00:00:
'After-hours' = 'Actual Room Out DateTime' - 'Actual Room In DateTime'
... to cover all the possible cases.
对于这种确切的问题,有没有更简单的方法或某种框架/工具?
答案 0 :(得分:0)
从“业务开始时间”中减去时间,以在开始工作前的几个小时之外获取时间
从业务结束时间中减去出站时间,以在工作日结束后获得空闲时间
从外出时间中减去时间,以获得手术的总时间
将两个非工作时间相加,以得出总的非工作时间
从总工时中减去总的非工作时间,以在工作时间内得到总工数
为每次计算单独创建一列