Панды получают разницу в 2 раза при условии, что если end_time меньше, чем start_time, то это на следующий день - PullRequest
0 голосов
/ 31 октября 2018

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

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), поэтому я хочу, чтобы продолжительность была два часа.

Как мне достичь такого результата?

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

1 Ответ

0 голосов
/ 31 октября 2018

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

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
...