使用时间戳信息将列分类为业务小时和工作日



我有一个包含以下信息的数据框,

         Timestamp         Day_of_week
    2017-07-11 09:31:44    Thursday
    2017-07-11 23:24:43    Thursday
    2017-07-23 14:24:34    Saturday
    2017-07-24 16:58:49    Wednesday
    2017-07-31 21:10:35    Monday

我的目标是使用Timestamp列中的信息将另外两列附加到上述数据框中。所以这就是我尝试过的,但我无法弄清楚如何定义工作时间(如果在上午 9:00 至下午 18:00 之间(。

def FDH(df):
    days=['Monday','Tuesday','Wednesday','Thursday','Friday']
    Time
    if df['day_of_week']==days:
        val = True
    else:
        value =False
    if df['time']>=09:00:00 and <=18:00:00:
        val=True

但是该函数抛出以下错误,

 File "<ipython-input-68-5ca185527341>", line 8
    if dates['time']>=09:00:00 && <=18:00:00:
                       ^
SyntaxError: invalid token

目标输出是,

UID    Timestamp        Weeday  Weekday_bussi_hour
AAD 2017-07-11 09:31:44 TRUE    TRUE
AAD 2017-07-11 23:24:43 TRUE    FALSE
SAP 2017-07-23 14:24:34 FALSE   FALSE
SAP 2017-07-24 16:58:49 TRUE    TRUE
YAS 2017-07-31 21:10:35 TRUE    FALSE
您可以将

isinbetween一起使用:

days=['Monday','Tuesday','Wednesday','Thursday','Friday']
df['busy_days'] = df['Day_of_week'].isin(days)
df['rush_hours'] = df['Timestamp'].dt.time.between(datetime.time(9), datetime.time(18))

dayofweek

df['busy_days'] = df['Timestamp'].dt.dayofweek < 5
df['rush_hours'] = df['Timestamp'].dt.time.between(datetime.time(9), datetime.time(18))
print (df)
            Timestamp Day_of_week  busy_days  rush_hours
0 2017-07-11 09:31:44    Thursday       True        True
1 2017-07-11 23:24:43    Thursday       True       False
2 2017-07-23 14:24:34    Saturday      False        True
3 2017-07-24 16:58:49   Wednesday       True        True
4 2017-07-31 21:10:35      Monday       True       False
您可以使用

between_timeweekday来实现您的目标

df['rush_hours'] = df['Timestamp'].between_time("9:00", "18:00") >= pd.datetime(1970,1,1)
df['rush_hours'].fillna(False, inplace=True)
df['busy_days'] = df['Timestamp'].dt.weekday < 5 # monday - friday

最新更新