Разница между двумя временными метками, округленными до часов, и добавлением столбца к данным - PullRequest
0 голосов
/ 14 мая 2018

У меня есть фрейм данных, который выглядит следующим образом, последние два столбца я добавил, чтобы помочь мне понять разницу во времени.Я бы хотел, чтобы разница во времени между 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, я не получил никаких ошибок.Не уверен, где именно округлить и как.Спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Я считаю, что нужно 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   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...