Python 如果二进制文件在时间范围内工作,则创建二进制文件

Python 如果二进制文件在时间范围内工作,则创建二进制文件,python,pandas,datetime,Python,Pandas,Datetime,我有一个id为、开始工作时间和完成工作时间的数据帧。一个工人每天可以工作n次。以下是我的数据示例: import pandas as pd id = ['Elton', 'Jose', 'Davis', 'Elton'] started_work_time = ['09:23', '10:32', '09:11', '10:45'] finished_work_time= ['10:10', '11:00', '21:30', '11:00'] df = pd.DataFrame({'id':

我有一个id为、开始工作时间和完成工作时间的数据帧。一个工人每天可以工作n次。以下是我的数据示例:

import pandas as pd
id = ['Elton', 'Jose', 'Davis', 'Elton']
started_work_time = ['09:23', '10:32', '09:11', '10:45']
finished_work_time= ['10:10', '11:00', '21:30', '11:00']

df = pd.DataFrame({'id':id, 'started_work_hours':started_work_time, 'finished_work_time':finished_work_time}, index=id)
df['started_work_time'] = pd.to_datetime(df['started_work_time'])
df['finished_work_time'] = pd.to_datetime(df['finished_work_time'])
print(df)

 id      started_work_hours    finished_work_time
Elton              09:23              10:10
Jose               10:32              11:01
Davis              09:11              10:30
Elton              10:45              11:07
我需要的是创建一个二进制1-0的数据帧,如果id在20分钟内工作,从9点到11点20分,例如Jose从10:32工作到11:01,那么他在10:20-10:40和10:40-11:00之间:

id        9:00  9:20 9:40 10:00 10:20 10:40 11:00 
Elton      0     1    1     1     0     0     0
Jose       0     0    0     0     1     1     1
Davis      1     1    1     1     1     0     0
Elton      0     0    0     0     0     1     1

我最近开始使用python,所以我甚至不知道如何开始,有人知道如何开始吗?谢谢

注意,在问题中,
print(df)
与示例
df
代码略有不同。为了清楚起见,这是我使用的示例
df

df=pd.DataFrame({'id':['Elton','Jose','Davis','Elton'],'started\u work\u time':['09:23','10:32','09:11','10:45'],'finished\u work\u time':['10:10','11:01','10:30','11:07'])。设置索引('id')。应用(pd.to\u datetime)
#开始工作时间结束工作时间
#身份证
#埃尔顿2021-04-27 09:23:00 2021-04-27 10:10:00
#何塞2021-04-27 10:32:00 2021-04-27 11:01:00
#戴维斯2021-04-27 09:11:00 2021-04-27 10:30:00
#埃尔顿2021-04-27 10:45:00 2021-04-27 11:07:00
首先创建一个20分钟的间隔日期范围,以便以后用作列:

start=df.min().min().floor('20min')
end=df.max().max().floor('20min')
columns=pd.date\u范围(开始=开始,结束=结束,频率='20min')
#DatetimeIndex(['2021-04-27 09:00:00','2021-04-27 09:20:00',',
#                '2021-04-27 09:40:00', '2021-04-27 10:00:00',
#                '2021-04-27 10:20:00', '2021-04-27 10:40:00',
#                '2021-04-27 11:00:00'],
#dtype='datetime64[ns]',freq='20T')
并创建一个函数来测试给定列是否位于每个开始/完成对之间:

def工作(列):
启动后=column.name>=df.loc[column.index,‘启动工作时间’].dt.floor(20分钟)

在_finished=column.name之前,这里有一个提示让您开始:datetime.datetime对象可以从一个对象减去另一个对象,得到datetime.timedelta。