如何从熊猫数据框的两个日期时间列中获取持续时间?

时间:2018-08-20 20:34:13

标签: pandas datetime dataframe

我的熊猫数据框中有两个日期时间列;如何找到小时数差异(数字)?

  • 例如持续时间 2018-07-30 19:03:04至2018-07-31 11:00:48 是15.962小时。 当我减去两列时,得到15:57:43.430000,这是不希望的。

1 个答案:

答案 0 :(得分:1)

timedelta中抽出几秒钟,然后除以60*60。 除以60 Seconds -> 1 Minute60 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')