如果时间以大Pandas为单位,则计算日期+1

2024-05-16 03:19:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一定条件下计算日期

数据帧:

    ID      PID PDate       
1   BBBBBB  A12 20210512T165301.046    
2   BBBBBB  A12 20210511T055001.199    
3   CCCCCC  B11 20210512T105805.685

如果Pdate时间大于下午4点,则在日期上加一,如果时间小于上午9:30,则在日期上减去一。日期以24小时格式给出,时间在字符T之后。 例如20210512T165301.046,这里的时间是1653,大于下午4点,因此必须是20210513

这几天是营业日。如果当前日期是星期五,则第二天是星期一,如果当前日期是星期一,则前一天是星期五。 我也不得不把假期排除在外

Expected:
    ID      PID PDate       
1   BBBBBB  A12 20210513  
2   BBBBBB  A12 20210510 
3   CCCCCC  B11 20210512

时间只给出了9:30-4之间的范围,我不知道如何获得前一天和第二天的响应

有人能帮我吗


Tags: 数据id格式时间条件字符pid小时
2条回答

使用pd.to_datetime将转换后的小时数添加到日期时间

df.PDate = pd.to_datetime(df.PDate)
c1 = df.PDate.dt.time<datetime.time(9,30,0)
c2 = df.PDate.dt.time>datetime.time(16,00,0)
df['new_date'] = np.select([c1,c2], [df.PDate.dt.date.apply(lambda x: x - BDay(1)), df.PDate.dt.date.apply(lambda x: x + BDay(1))],default=df.PDate)
df
       ID  PID                   PDate                new_date
1  BBBBBB  A12 2021-05-12 16:53:01.046 2021-05-13 00:00:00.000
2  BBBBBB  A12 2021-05-11 05:50:01.199 2021-05-10 00:00:00.000
3  CCCCCC  B11 2021-05-12 10:58:05.685 2021-05-12 10:58:05.685
df['new_date'] = df['PDate'].apply(lambda x : int(x[:8])+1
                  if int(x[9:13]) > 1600
                  else (int(x[:8])-1 if int(x[9:13]) < 930
                  else int(x[:8]))
                  )

是这样吗

相关问题 更多 >