Оба решения - dt.components или np.timedelta64 - полезны. Просто np.timedelta64 намного быстрее, чем dt.components (это полезно знать, особенно для больших фреймов данных):
import pandas as pd
import numpy as np
dct = {
'date1': ['08:05:23', '18:07:20', '08:05:23'],
'date2': ['09:15:24', '22:07:20', '08:54:01']
}
df = pd.DataFrame(dct)
df['date1'] = pd.to_datetime(df['date1'], format='%H:%M:%S')
df['date2'] = pd.to_datetime(df['date2'], format='%H:%M:%S')
df['delta'] = df['date2']-df['date1']
%timeit df['np_h'] = (df['delta'] / np.timedelta64(1,'h')).astype(int)
%timeit df['td_h'] = df['delta'].dt.components['hours']
Output:
1000 loops, best of 3: 484 µs per loop
1000 loops, best of 3: 1.43 ms per loop
И, как заметил @EdChum, dt.components['hours']
возвращает только значение часов <24, что в действительности не является проблемой в случае этого вопроса. Но для полных дат, где дельта> 24 часа dt.components['days']*24+dt.components['hours']
должна использоваться (что удваивает время обработки).