Подтвердить что ты не робот

Вычислить Pandas Разность времени DataFrame между двумя столбцами в часах и минутах

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

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

df['diff'] = df['todate'] - df['fromdate']

Я получаю столбец diff в днях, если более 24 часов.

2014-01-24 13:03:12.050000,2014-01-26 23:41:21.870000,"2 days, 10:38:09.820000"
2014-01-27 11:57:18.240000,2014-01-27 15:38:22.540000,03:41:04.300000
2014-01-23 10:07:47.660000,2014-01-23 18:50:41.420000,08:42:53.760000

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

4b9b3361

Ответ 1

Pandas отличия метки времени возвращают объект datetime.timedelta. Это можно легко преобразовать в часы с помощью метода * as_type *, например,

import pandas
df = pandas.DataFrame(columns=['to','fr','ans'])
df.to = [pandas.Timestamp('2014-01-24 13:03:12.050000'), pandas.Timestamp('2014-01-27 11:57:18.240000'), pandas.Timestamp('2014-01-23 10:07:47.660000')]
df.fr = [pandas.Timestamp('2014-01-26 23:41:21.870000'), pandas.Timestamp('2014-01-27 15:38:22.540000'), pandas.Timestamp('2014-01-23 18:50:41.420000')]
(df.fr-df.to).astype('timedelta64[h]')

чтобы получить,

0    58
1     3
2     8
dtype: float64

Ответ 2

Это приводило меня в бешенство, так как решение .astype() выше не работало для меня. Но я нашел другой путь. Не приурочил его или что-то еще, но может работать для других:

t1 = pd.to_datetime('1/1/2015 01:00')
t2 = pd.to_datetime('1/1/2015 03:30')

print pd.Timedelta(t2 - t1).seconds / 3600.0

... если вы хотите часов. Или:

print pd.Timedelta(t2 - t1).seconds / 60.0

... если вы хотите минут.