【问题标题】:How to add a pandas Timedelta to a Timestamp for a specific business and working time range如何将 pandas Timedelta 添加到特定业务和工作时间范围的时间戳
【发布时间】:2019-11-08 20:28:40
【问题描述】:

我想添加一个 Timedelta,例如6 小时 30 分钟到时间戳。结果应该只考虑例如之间的具体工作时间。所有有效工作日的 8:00(开始工作时间)和 16:00(结束工作时间)。当我使用以下代码尝试此操作时,这将在错误的结束时间结束。

pd.Timedelta('06:30:00') + pd.Timestamp('2019-11-08 14:30:00')
Timestamp('2019-11-08 21:00:00')

所需的结果必须是 '2019-11-09 11:00:00' 而不是 '2019-11-08 21:00:00'

是否有人知道如何指定营业时间的好解决方案,以便我可以将 Timedelta 添加到时间戳并且结果最终在正确的营业时间范围内?

感谢和最好的问候 md5sum

【问题讨论】:

  • 您在处理一列数据吗?解决此问题的一种方法是掩盖要添加的时间增量大于工作日剩余时间的位置,并分别处理它们。
  • 不,我选择 pandas 只是因为它们有很多类可以处理业务日期的偏移量 [link] (pandas.pydata.org/pandas-docs/stable/reference/api/…) 我想可能有一个包可以简单地处理这个问题方式。

标签: python pandas date python-datetime


【解决方案1】:
time_ini=pd.Timestamp('2019-11-08 14:30:00')
delta=pd.Timedelta('6:30:00')

def calculate_date(time,delta,ini,fin):
    Sum=time+delta
    if Sum.hour>fin:
        Sum= time + pd.Timedelta(days=1,hours=ini+Sum.hour-fin-time.hour-1,minutes=60-time.minute-1,seconds=60-time.second)
    elif Sum.hour <time.hour:
        Sum=time+pd.Timedelta(days=1,hours=ini+(24-fin)+Sum.hour-1-time.hour,minutes=60-time.minute-1,seconds=60-time.second)
    if Sum.dayofweek >4:
        Sum=Sum+pd.Timedelta(days=7-Sum.dayofweek)
    return Sum
calculate_date(time_ini,delta,10,20)

输出

Timestamp('2019-11-11 11:00:00')

【讨论】:

  • 谢谢,我有一个问题:if Sum.hour&gt;20 20 是一个常数值还是要由inifin 计算?谢谢
  • 是ini和fin,现在看
  • 请,现在检查:)
  • 但是我得到了错误的值,因为如果我假设 @987654326 所需的输出应该是 2019-11-09 14:00:00 而不是 2019-11-09 01:00:00 @ 和 fin 分别是 10:00 开始和结束的 20:00 工作时间。
  • 我忘记了如果 Sum.hour>fin 更改,现在检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 2023-03-31
  • 2015-03-01
  • 1970-01-01
  • 2018-12-28
  • 2012-08-25
相关资源
最近更新 更多