我有一个看起来像这样的数据框,我添加的最后两列帮助我理解时差。我希望将timestamp
和forecastRan
之间的时差向上舍入到下一个小时,并将其作为列添加到我的数据框中。但是,我如何拥有它只是给了我几个小时(没有四舍五入)。
timeStamp forecastRan time_diff_in_hours time_diff_seconds
12 2016-11-23 23:00:00 2016-11-23 12:18:00 10.0 38520.0
13 2016-11-24 00:00:00 2016-11-23 12:18:00 11.0 42120.0
14 2016-11-24 01:00:00 2016-11-23 12:18:00 12.0 45720.0
这些是我获得差异的方式
df['time_diff_in_hours'] = (df['timeStamp'] - df['forecastRan']).astype('timedelta64[h]')
df['time_diff']= (df['timeStamp'] - df['forecastRan']).dt.total_seconds()
然而,第一个只给我时间。对于第二个,我尝试除以3600得到小时,然后使用math.ceil
向上舍入,如下所示:
import datetime
import math
df['time_diff']= math.ceil(((df['timeStamp'] - df['forecastRan']).dt.total_seconds()/3600))
我得到TypeError: cannot convert the series to <class 'float'>
。我认为问题发生在我引用math.ceil
时,因为当我刚刚使用(df['timeStamp'] - df['forecastModelRun']).dt.total_seconds()/3600
时,我没有遇到任何错误。不知道到底在哪里整理以及如何进行。
感谢。
答案 0 :(得分:1)
我认为需要np.ceil
:
df['time_diff']= np.ceil(((df['timeStamp'] - df['forecastRan']).dt.total_seconds()/3600))
print (df)
timeStamp forecastRan time_diff_in_hours \
0 2016-11-23 23:00:00 2016-11-23 12:18:00 10.0
1 2016-11-24 00:00:00 2016-11-23 12:18:00 11.0
2 2016-11-24 01:00:00 2016-11-23 12:18:00 12.0
time_diff_seconds time_diff
0 38520.0 11.0
1 42120.0 12.0
2 45720.0 13.0
或dt.ceil
:
df['time_diff']= (df['timeStamp'] - df['forecastRan']).dt.ceil('h')
print (df)
timeStamp forecastRan time_diff_in_hours \
0 2016-11-23 23:00:00 2016-11-23 12:18:00 10.0
1 2016-11-24 00:00:00 2016-11-23 12:18:00 11.0
2 2016-11-24 01:00:00 2016-11-23 12:18:00 12.0
time_diff_seconds time_diff
0 38520.0 11:00:00
1 42120.0 12:00:00
2 45720.0 13:00:00
df['time_diff' ]= (df['timeStamp'] - df['forecastRan']).dt.ceil('h').astype('timedelta64[h]')
print (df)
timeStamp forecastRan time_diff_in_hours \
0 2016-11-23 23:00:00 2016-11-23 12:18:00 10.0
1 2016-11-24 00:00:00 2016-11-23 12:18:00 11.0
2 2016-11-24 01:00:00 2016-11-23 12:18:00 12.0
time_diff_seconds time_diff
0 38520.0 11.0
1 42120.0 12.0
2 45720.0 13.0