【问题标题】:calculate date+1 if time is greater in pandas如果熊猫的时间更大,则计算日期+1
【发布时间】:2021-06-17 20:19:53
【问题描述】:

我正在尝试在某些条件下计算日期。

数据框:

    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

between.time 仅给出 9:30-4 之间的范围,我不知道如何获得前一天和第二天的时间。

谁能帮帮我?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用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
    

    【讨论】:

    • 谢谢你试试这个。我忘了说它必须是工作日。如果今天是星期五,那么第二天就是星期一,如果今天是星期一,那么前一天就是星期五。
    • 非常感谢它运行良好。我必须学习更多的 lambda 和 pandas 中的选择操作。
    【解决方案2】:
    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]))
                      )
    

    对吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 2021-09-18
      相关资源
      最近更新 更多