2017-01-30 10 views
2

Если у меня есть dataframe в панде, как:Создать новый столбец в панде на основе того, являются ли значения DateTime в течение часа

StartDate,   EndDate,    uniqueid 
2015-07-20 15:04:13, 2015-07-20 17:56:00, 1 
2015-07-20 20:32:16, 2015-07-20 20:56:11, 3 
2015-07-20 22:35:59, 2015-07-20 22:51:10, 11 
2015-07-20 18:00:51, 2015-07-20 18:42:01, 12  

Я хочу, чтобы создать новый столбец, который имеет в значении индикатора, если в списке есть существует StartDate менее чем через час после строк EndDate. Таким образом, пример вывода будет выглядеть так:

StartDate,   EndDate,    uniqueid, WithinHour 
2015-07-20 15:04:13, 2015-07-20 17:56:00, 1,  1 
2015-07-20 20:32:16, 2015-07-20 20:56:11, 3,  0 
2015-07-20 22:35:59, 2015-07-20 22:51:10, 11,  0 
2015-07-20 18:00:51, 2015-07-20 18:42:01, 12,  0 

Из строки 1 имеет

EndDate 2015-07-20 17:56:00 

и строка 4 имеет

StartDate 2015-07-20 18:00:51 

, который в течение 1 часа.

Не должно быть перекрытия в начале и конце даты для строк, поэтому я думаю, что я должен заказать startdate, создать новый столбец с помощью (StartDate следующей строки) - (EndDate этой строки), затем измените значение нового столбца на 1, если время меньше часа и 0, если оно больше. Я не уверен, как это сделать.

ответ

1

Это один из способов. Для каждого EndDate примените требуемый тест диапазона времени. Используйте any для получения скалярного ответа, так как ваше значение будет истинным, если соответствует хотя бы один ряд:

df['uniqueid'] = df.EndDate.apply(lambda dt: (((df.StartDate-pd.Timedelta(1, 'h')) <= dt) 
              & (df.StartDate >= dt)).any()) 

df.uniqueid 
Out[57]: 
0  True 
1 False 
2 False 
3 False 
Name: uniqueid, dtype: bool 

 Смежные вопросы

  • Нет связанных вопросов^_^