Определите, попадает ли выходной в диапазоны дат - PullRequest
0 голосов
/ 05 октября 2018

У меня есть следующий фрейм данных с датами начала и окончания, а также список определенных выходных.

df = pd.DataFrame({'Start': ['2018-01-01 18:47','2018-01-08 06:11','2018-01-12 10:05','2018-02-10 09:22','2018-02-18 14:14','2018-03-08 16:17','2018-03-25 17:35'],
               'End': ['2018-01-02 17:00','2018-01-08 17:00','2018-01-16 10:05','2018-02-12 17:00','2018-02-19 14:14','2018-03-12 16:17','2018-03-26 17:00']})

Holidays = [date(2018,1,1),date(2018,1,15),date(2018,2,19),date(2018,3,9),date(2018,5,28),date(2018,7,4),date(2018,9,3),date(2018,11,22),date(2018,11,23),date(2018,12,24),date(2018,12,25)]

Как я могу определить случаи, когда выходной находится между соответствующим началоми Дата окончания или совпадает с датой окончания?

Меня не интересует, совпадает ли праздничная дата с датой начала.

Результат должен быть следующим:

result = pd.DataFrame({'Start': ['2018-01-01 18:47','2018-01-08 06:11','2018-01-12 10:05','2018-02-10 09:22','2018-02-18 14:14','2018-03-08 16:17','2018-03-25 17:35'],
                   'End': ['2018-01-02 17:00','2018-01-08 17:00','2018-01-16 10:05','2018-02-12 17:00','2018-02-19 14:14','2018-03-12 16:17','2018-03-26 17:00'],
                   'InRange': [0,0,1,0,1,1,0]})

1 Ответ

0 голосов
/ 05 октября 2018

Это решение O (n * m)

l=[any([(z>x)&(z<y) for z in Holidays]) for x , y in zip(df.Start.dt.date,df.End.dt.date)]
#[any((z>x)&(z<y) for z in Holidays) for x , y in zip(df.Start.dt.date,df.End.dt.date)]
l
Out[1089]: [False, False, True, False, False, True, False]


#df['InRange']=l
#df['InRange']=df['InRange'].astype(int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...