Python сравнивает список дат с начальными и конечными столбцами даты в фрейме данных - PullRequest
0 голосов
/ 08 декабря 2018

Проблема: у меня есть фрейм данных с двумя столбцами: Дата начала и Дата окончания.У меня также есть список дат.Допустим, данные выглядят примерно так:

data = [[1/1/2018,3/1/2018],[2/1/2018,3/1/2018],[4/1/2018,6/1/2018]]
df = pd.DataFrame(data,columns=['startdate','enddate'])

dates=[1/1/2018,2/1/2018]

Что мне нужно сделать:

1) Создать новый столбец для каждой даты в списке дат

2) для каждой строки в df, если дата создания нового столбца находится между начальной и конечной датами, присвойте 1;если нет, присвойте 0.

Я пытался использовать zip, но потом я понял, что строки df будут тысячами строк, где список дат будет содержать около 24 элементов (охватывающих 2 года), поэтомуон останавливается, когда список дат исчерпан, т. е. на 24.

Итак, вот как выглядит оригинальный df и как он должен выглядеть потом:

До:

   startdate    enddate
0 2018-01-01 2018-03-01
1 2018-02-01 2018-03-01
2 2018-04-01 2018-06-01

После:

  startdate   enddate 1/1/2018 2/1/2018
0  1/1/2018  3/1/2018        1        1
1  2/1/2018  3/1/2018        0        1
2  4/1/2018  6/1/2018        0        0

Любая помощь по этому вопросу будет высоко ценится, спасибо!

1 Ответ

0 голосов
/ 08 декабря 2018

Использование numpy трансляция

s1=df.startdate.values
s2=df.enddate.values
v=pd.to_datetime(pd.Series(dates)).values[:,None]


newdf=pd.DataFrame(((s1<=v)&(s2>=v)).T.astype(int),columns=dates,index=df.index)
pd.concat([df,newdf],axis=1)
   startdate    enddate  1/1/2018  2/1/2018
0 2018-01-01 2018-03-01         1         1
1 2018-02-01 2018-03-01         0         1
2 2018-04-01 2018-06-01         0         0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...