我的熊猫数据框中有两个日期时间列;如何找到小时数差异(数字)?
例如持续时间 2018-07-30 19:03:04至2018-07-31 11:00:48 是15.962小时。 当我减去两列时,得到15:57:43.430000,这是不希望的。
答案 0 :(得分:1)
从timedelta
中抽出几秒钟,然后除以60*60
。
除以60 Seconds -> 1 Minute
和60 Minutes -> 1 Hour
,因此输出将以小时数为单位。
代码:
t1 = pd.to_datetime('2018-07-30 19:03:04')
t2 = pd.to_datetime('2018-07-31 11:00:48')
(t2-t1).seconds/(60*60)
15.962222222222222
当您减去它们时,您将获得默认的时间增量表示视图,该视图首先显示天,然后显示小时,然后显示分钟,秒和微秒。那就是您获得的15:57:44
值。
t2-t1
Timedelta('0 days 15:57:44')
将15:57:44
的值四舍五入是因为t1和t2在问题中没有微秒。
要在series
上使用此概念,您需要使用类似以下的apply
方法。
DateTime
列已生成并重新排列。
代码:
dates = pd.date_range('2018-08-23 02:34:54','2018-08-24 00:00:00',periods=22).values
np.random.shuffle(dates)
df = pd.DataFrame(dates.reshape(11,2),columns=['t1','t2'])
df
t1 t2
0 2018-08-23 21:57:36.571428608 2018-08-23 08:42:04.285714176
1 2018-08-23 07:40:52.571428608 2018-08-23 22:58:48.285714176
2 2018-08-23 16:51:38.000000000 2018-08-23 11:45:39.428571392
3 2018-08-24 00:00:00.000000000 2018-08-23 04:37:17.428571392
4 2018-08-23 10:44:27.714285824 2018-08-23 12:46:51.142857216
5 2018-08-23 06:39:40.857142784 2018-08-23 13:48:02.857142784
6 2018-08-23 15:50:26.285714176 2018-08-23 03:36:05.714285824
7 2018-08-23 02:34:54.000000000 2018-08-23 09:43:16.000000000
8 2018-08-23 05:38:29.142857216 2018-08-23 18:54:01.428571392
9 2018-08-23 14:49:14.571428608 2018-08-23 19:55:13.142857216
10 2018-08-23 20:56:24.857142784 2018-08-23 17:52:49.714285824
(df['t1']-df['t2']).apply(lambda x: x.seconds/(60*60))
0 13.258889
1 8.701111
2 5.099444
3 19.378333
4 21.960000
5 16.860556
6 12.238889
7 16.860556
8 10.740833
9 18.900278
10 3.059722
dtype: float64
更新: 比上述方法更快的方法:
(df['t1']-df['t2'])/np.timedelta64(1,'h')