проверить дату и время между двумя столбцами в панде данных - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть два фрейма данных:

Первый кадр даты:

import pandas as pd
df1 = pd.DataFrame({'serialNo':['aaaa','bbbb','cccc','ffff','aaaa','bbbb','aaaa'],
               'Name':['Sayonti','Ruchi','Tony','Gowtam','Toffee','Tom','Sayonti'],
               'testName':   [4402, 3747 ,5555,8754,1234,9876,3602],
               'moduleName':   ['singing', 'dance','booze', 'vocals','drama','paint','singing'],
               'endResult': ['WARNING', 'FAILED', 'WARNING', 'FAILED','WARNING','FAILED','WARNING'],
               'Date':['2018-10-5','2018-10-6','2018-10-7','2018-10-8','2018-10-9','2018-10-10','2018-10-8'],
               'Time_df1':['23:26:39','22:50:31','22:15:28','21:40:19','21:04:15','20:29:11','19:54:03']})

Второй кадр данных:

df2 = pd.DataFrame({'serialNo':['aaaa','bbbb','aaaa','ffff','xyzy','aaaa'],
               'Food':['Strawberry','Coke','Pepsi','Nuts','Apple','Candy'],
               'Work':   ['AP', 'TC','OD', 'PU','NO','PM'],
               'Date':['2018-10-1','2018-10-6','2018-10-2','2018-10-3','2018-10-5','2018-10-10'],
               'Time_df2':['09:00:00','10:00:00','11:00:00','12:00:00','13:00:00','14:00:00']
               })

Я присоединяюсь к двум на основе серийного номера:

df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])
result = pd.merge(df1,df2,on=['serialNo'],how='inner')

Теперь я хочу, чтобы Date_y находился в течение 3 дней после Date_x, начиная с Date_x что означает, что Date_X + (1,2,3 дня) должно быть Date_y. И я могу получить это, как показано ниже, но я также хочу проверить временной диапазон, который я не знаю, как достичь

result = result[result.Date_x.sub(result.Date_y).dt.days.between(0,3)]

Я хочу проверить время, такое, что Time_df2 находится в пределах 6 часов от времени начала, являющегося Time_df1. Пожалуйста, помогите?

1 Ответ

0 голосов
/ 08 ноября 2018

В вашем фрейме данных может быть столбец, который объединяет дату и время. Вот пример объединения одной строки в кадре данных:

# Combining Date_x and time_df1
value_1_x = datetime.datetime.combine(result['Date_x'][0].date() ,\
datetime.datetime.strptime(result['Time_df1'][0], '%H:%M:%S').time())

# Combining date_y and time_df2
value_2_y = datetime.datetime.combine(result['Date_y'][0].date() , \
datetime.datetime.strptime(result['Time_df2'][0], '%H:%M:%S').time())

Затем, учитывая два объекта даты и времени, вы можете просто вычесть, чтобы найти разницу, которую вы ищете:

difference = value_1_x - value_2_y
print(difference)

Что дает вывод:

4 days, 14:26:39

Насколько я понимаю, вы ищете, чтобы что-то было в течение 3 дней и 6 часов (или в общей сложности 78 часов). Вы можете легко преобразовать это в часы, а затем сделать желаемое сравнение:

hours_difference = abs(value_1_x - value_2_y).total_seconds() / 3600.0
print(hours_difference)

Что дает вывод:

110.44416666666666

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...