Python 如果二进制文件在时间范围内工作,则创建二进制文件
我有一个id为、开始工作时间和完成工作时间的数据帧。一个工人每天可以工作n次。以下是我的数据示例: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':
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。