Панды получают разницу в 2 раза, предполагая, что если end_time ниже, чем start_time, это следующий день

Предполагая, что это мой фрейм данных:

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 часа.

Как добиться такого результата?

Любая помощь будет оценена по достоинству!

1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать вычесть, преобразовав в метку времени, и для всех исключительных случаев отрицательных значений добавьте дополнительную продолжительность дня.

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

Другие вопросы по теме