【发布时间】:2019-06-09 19:17:53
【问题描述】:
我正在尝试创建一个新列以确定行值是否为“工作时间之间”。为此,我尝试使用 between time 函数。 如果有更简单的方法,我不需要使用它。
我有一个数据框,其中包含 'Date'、'StartHour'、'End Hour' 列。
问题:
如果“Date”列中的时间介于“StartHour”和“”之间,我想给出“True”或“False” EndHour的时间。
import pandas as pd
import numpy as np
#create dataframe with dates
d = {'Date': ['2016-11-17 05:01:45','2011-01-04 16:34:00','2011-01-05 09:25:45',
'2011-01-10 12:00:45','2011-01-14 07:05:45','2011-01-15 10:19:00',
'2011-01-17 13:59:45','2011-01-19 18:39:45','2011-01-22 06:19:45'],
'StartHour': ['16:00','16:00','16:00','16:00','16:00','16:00','16:00','16:00','16:00'],
'EndHour': ['10:00','10:00','10:00','10:00','10:00','10:00','10:00','10:00','10:00'],
'Station_ID': ['A','A','A','A','B','B','B','B','B']}
df = pd.DataFrame(data=d)
#convert date column to datetime
df['Date'] = df['Date'].values.astype('datetime64[ns]')
#************************
# set index to Date (need for 'between_time')
df = df.set_index('Date')
# run calculation for between time
df['between_business_hours'] = df.index.isin(df.between_time('16:00', '10:00', include_start=True, include_end=True).index)
df
我已经使用 between_time 函数计算了一列,但这仅允许我使用硬编码值作为开始时间和结束时间。我想使用“StartTime”和“EndTime”列中的值。通过使用 between_time 函数,我可能使这变得比需要的更困难。
我希望输出看起来像这样。
EndHour StartHour Station_ID between_business_hours
Date
2016-11-17 05:01:45 10:00 16:00 A True
2011-01-04 16:34:00 10:00 16:00 A True
2011-01-05 09:25:45 10:00 16:00 A True
2011-01-10 12:00:45 10:00 16:00 A False
2011-01-14 07:05:45 10:00 16:00 B True
2011-01-15 10:19:00 10:00 16:00 B False
2011-01-17 13:59:45 10:00 16:00 B False
2011-01-19 18:39:45 10:00 16:00 B True
2011-01-22 06:19:45 10:00 16:00 B True
感谢任何帮助
【问题讨论】:
标签: python pandas time between