在python中添加24小时到负时差

时间:2015-04-27 23:08:38

标签: python datetime if-statement timedelta

我正在使用python来计算两个事件之间的时间间隔。每个活动都有“开始时间”和“结束时间”。我在新列中找到了两者之间的差异,'interval',但是当开始和结束时间在不同的日子时有负值(例如开始23:46:00和结束00:21:00给出-23 :25:00)。我想创建一个if语句来运行'interval'列,并为任何负值添加24小时。但是,我在“间隔”值中添加了24小时的问题。目前我的'间隔'dtype = timedelta64 [ns]。

以下是澄清问题的一小部分表:

        CallDate      BeginningTime        EndingTime            Interval
    75  1/8/2009    1900-01-01 07:49:00  1900-01-01 08:19:00     00:30:00
    76  1/11/2009   1900-01-01 14:37:00  1900-01-01 14:59:00     00:22:00
    77  1/9/2009    1900-01-01 09:29:00  1900-01-01 09:56:00     00:27:00
    78  1/11/2009   1900-01-01 09:20:00  1900-01-01 10:13:00     00:53:00
    79  1/16/2009   1900-01-01 15:11:00  1900-01-01 15:50:00     00:39:00
    80  1/17/2009   1900-01-01 22:52:00  1900-01-01 23:26:00     00:34:00
    81  1/19/2009   1900-01-01 05:48:00  1900-01-01 06:32:00     00:44:00
    82  1/20/2009   1900-01-01 23:46:00  1900-01-01 00:21:00     -23:25:00
    83  1/20/2009   1900-01-01 21:29:00  1900-01-01 22:08:00     00:39:00
    84  1/23/2009   1900-01-01 07:33:00  1900-01-01 07:55:00     00:22:00
    85  1/30/2009   1900-01-01 19:33:00  1900-01-01 20:01:00     00:28:00

更新:这是导致我这一点的代码

   df['BeginningTime']=pd.to_datetime(df['BeginningTime'], format='%H:%M')
   df['EndingTime']=pd.to_datetime(df['EndingTime'], format='%H:%M')

   df['Interval']=df['EndingTime']-df['BeginningTime']

   df[['CallDate','BeginningTime','EndingTime','Interval']]

1 个答案:

答案 0 :(得分:3)

如果你只是想在时间增加1天,如果它是负数:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam accumsan, orci ut posuere aliquet, libero erat vestibulum ligula, nec eleifend sapien nunc eu leo. Mauris ligula sapien, posuere eu ligula et, tincidunt pharetra velit. Pellentesque volutpat elit sed mollis lacinia. Donec nunc diam, viverra vel sapien non, dictum faucibus nibh. Donec dictum nec diam non sagittis. Quisque eget arcu et nunc lobortis accumsan vitae vel urna. Vivamus semper mollis auctor. Donec tempus, lectus quis maximus gravida, arcu lorem sollicitudin elit, nec sollicitudin sem neque a felis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse vehicula, nibh vel euismod fringilla, mi lorem luctus dui, viverra efficitur diam sapien sit amet mi. Maecenas sed laoreet mauris. Nunc sodales, mi eu vulputate ullamcorper, ligula augue imperdiet massa, vitae fringilla tellus lorem id dui. In dapibus arcu nec felis porttitor varius.</p>

如果假设结束时间在24小时之内是安全的,您可以检查结束时间是否早于开始时间,并使用timedelta将一天添加到结束时间而不是间隔时间。

visibility: hidden

使用pandas你可以这样做:

df['Interval']=df['Interval'].apply(lambda x: x + Timedelta(days=1) if x < 0 else x)
from datetime import datetime, timedelta

d1 = datetime.strptime( "1900-01-01 23:46:00", "%Y-%m-%d %H:%M:%S" )
d2 = datetime.strptime( "1900-01-01 00:21:00", "%Y-%m-%d %H:%M:%S" )

if d2 < d1:
    d2 += timedelta(days=1)

print d2 - d1

# 0:35:00