вычесть минуты из даты и времени — python

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, состоящий из двух столбцов:

  • _time — dtype: datatime64
  • истекло — dtype: объект

Смотрите Фрейм данных:

vehicles_stats[['_time','elapsed']].head()

Вывод:

     _time                               elapsed
0   2020-10-28 21:06:39.797000 01:00    26
1   2020-10-28 16:12:38.357000 01:00    16
2   2020-10-28 19:16:38.737000 01:00    11
3   2020-10-29 11:58:43.122000 01:00    16
4   2020-10-28 20:38:39.294000 01:00    16
  

Как я могу изменить тип столбца «истекший», чтобы он представлял минуты?
Затем мне нужно вычесть эти минуты из значения _time для каждой записи.

Любой совет приветствуется

Ответ №1:

Используйте to_datetime с to_timedelta и вычитайте с помощью Series.sub :

 df['new'] = pd.to_datetime(df['_time']).sub(pd.to_timedelta(df['elapsed'], unit='min'))
print (df)
                              _time  elapsed                     new
0  2020-10-28 21:06:39.797000 01:00       26 2020-10-28 19:40:39.797
1  2020-10-28 16:12:38.357000 01:00       16 2020-10-28 14:56:38.357
2  2020-10-28 19:16:38.737000 01:00       11 2020-10-28 18:05:38.737
3  2020-10-29 11:58:43.122000 01:00       16 2020-10-29 10:42:43.122
4  2020-10-28 20:38:39.294000 01:00       16 2020-10-28 19:22:39.294
  

При необходимости преобразовать столбец в timedeltas из минут:

 df['elapsed'] = pd.to_timedelta(df['elapsed'], unit='min')
df['new'] = pd.to_datetime(df['_time']).sub(df['elapsed'])
print (df)
                              _time         elapsed                     new
0  2020-10-28 21:06:39.797000 01:00 0 days 00:26:00 2020-10-28 19:40:39.797
1  2020-10-28 16:12:38.357000 01:00 0 days 00:16:00 2020-10-28 14:56:38.357
2  2020-10-28 19:16:38.737000 01:00 0 days 00:11:00 2020-10-28 18:05:38.737
3  2020-10-29 11:58:43.122000 01:00 0 days 00:16:00 2020-10-29 10:42:43.122
4  2020-10-28 20:38:39.294000 01:00 0 days 00:16:00 2020-10-28 19:22:39.294