Преобразование столбцов в дату-время на to_datetime
или в timedeltas на to_timedelta
, вычитание на sub
, преобразование выходных timedeltas в total_seconds
и делим 60
:
start_time = pd.to_datetime(df['start_time'].astype(str))
end_time = pd.to_datetime(df['end_time'].astype(str))
#another solution
#start_time = pd.to_timedelta(df['start_time'].astype(str))
#end_time = pd.to_timedelta(df['end_time'].astype(str))
df['time_diff'] = start_time.sub(end_time).dt.total_seconds().div(60)
print (df)
code start_time end_time time_diff
0 0 13:00:09 13:30:09 -30.000000
1 1 14:23:33 15:23:23 -59.833333
2 2 11:30:00 12:30:00 -60.000000
Если время окончания обмена со временем запуска:
df['time_diff'] = end_time.sub(start_time).dt.total_seconds().div(60)
print (df)
code start_time end_time time_diff
0 0 13:00:09 13:30:09 30.000000
1 1 14:23:33 15:23:23 59.833333
2 2 11:30:00 12:30:00 60.000000
Образец :
import datetime
df = pd.DataFrame({'code': [0, 1, 2],
'start_time': [datetime.time(13, 0, 9), datetime.time(14, 23, 33),
datetime.time(11, 30)],
'end_time': [datetime.time(13, 30, 9), datetime.time(15, 23, 23),
datetime.time(12, 30)]})
print (df)
code start_time end_time
0 0 13:00:09 13:30:09
1 1 14:23:33 15:23:23
2 2 11:30:00 12:30:00
IDE из комментария, спасибо @Anton vBR:
start_time = pd.to_timedelta(df['start_time'].astype(str)).dt.total_seconds()
end_time = pd.to_timedelta(df['end_time'].astype(str)).dt.total_seconds()
df['time_diff'] = end_time.sub(start_time).div(60)
print (df)
code start_time end_time time_diff
0 0 13:00:09 13:30:09 30.000000
1 1 14:23:33 15:23:23 59.833333
2 2 11:30:00 12:30:00 60.000000