假设这是我的数据框:
date start_time end_time
1/1/2018 20:00 21:00
1/1/2018 23:00 1:00
我想添加另一列,名为duration
,显然是end_time - start_time
我的问题是,如果我写这样的话:
pd.to_datetime(train_2.end_time,format='%H:%M:%S')-pd.to_timedelta(train_2.start_time))
它认为第二行是负数(如23:00> 1:00),而实际上是正数,因为1:00是指第二天(1/2/2018),所以我希望持续时间为2小时。
如何获得这样的结果?
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以尝试通过转换为datestamp进行减法,对于所有负值的例外情况,都需要增加额外的持续时间
df['duration'] = pd.to_datetime(df.end_time) - pd.to_datetime(df.start_time)
df.loc[df.duration.dt.total_seconds() <0,'duration'] += pd.Timedelta(1,'D')
出局:
date start_time end_time duration
0 1/1/2018 20:00 21:00 01:00:00
1 1/1/2018 23:00 1:00 02:00:00