Вычислить 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
Как преобразовать мои результаты только в часах и минутах, игнорируя дни и даже секунды.
Ответы
Ответ 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
... если вы хотите минут.