计算时差并以小时为单位返回结果

时间:2019-08-07 15:05:22

标签: python pandas

我已经计算了两列之间的时间增量,并希望将其转换为小时。

我尝试将timedelta提取为小时,即:

df_clean['data__answered_at'] - df_clean['user_entered_details_stage_timestamp__c'].dt.hour

但这似乎不起作用/返回错误消息。

以下是时间增量计算输出的示例:

628         1 days 23:22:26
806         1 days 18:33:41
708         0 days 00:12:00
592         0 days 01:14:35
709         0 days 00:16:45
295      -81 days +09:45:03
1001        0 days 02:46:02
817         0 days 02:46:52
593         0 days 03:57:11
807         0 days 05:28:56
1069        0 days 10:22:24
464         0 days 00:00:36
1          11 days 14:35:31
243                     NaT
296                     NaT
819     -120 days +13:11:23
1002        0 days 00:10:43
65                      NaT
200         0 days 04:49:26
31          2 days 17:09:26
32        -1 days +17:31:12

2 个答案:

答案 0 :(得分:1)

您应该能够:

df['TD'] = (df_clean['data__answered_at'] - df_clean['user_entered_details_stage_timestamp__c']).astype('timedelta64[s]')

这将使您以秒为单位进行区别。要将秒数转换为小时数,您可以执行一些简单的数学运算:

df['TD'] = (df['TD']/60)/60

以小时为单位获取时间增量。

答案 1 :(得分:1)

np.timedelta64

除法将将该列强制转换为该单元。

s/np.timedelta64(1, 'h')
0   -48.000000
1   -48.333333
2   -48.666667
3   -49.000000
4   -49.333333
5          NaN
dtype: float64

DatetimeIndex.total_seconds()

s.dt.total_seconds()/3600  # 3600 seconds in an hour
0   -48.000000
1   -48.333333
2   -48.666667
3   -49.000000
4   -49.333333
5          NaN
dtype: float64

样本数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': pd.date_range('2010-01-01', periods=6, freq='11min'),
                   'B': pd.date_range('2010-01-03', periods=6, freq='31min')})
df.iloc[-1,:] = pd.NaT
s = df.A-df.B

#0   -2 days +00:00:00
#1   -3 days +23:40:00
#2   -3 days +23:20:00
#3   -3 days +23:00:00
#4   -3 days +22:40:00
#5                 NaT
#dtype: timedelta64[ns]