#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