Промежутки времени Datafrate

У меня есть датафрейм за год в котором нужно по колонке дат определить промежутки с 20:00 одного дня до 13:30 следующего дня и каждому блоку в этом промежутке назначить свой id. я попытался сделать это через query, но туда видимо нельзя передавать значения чтобы зациклить.

res = model.query("'2016-01-06 20:00:00' <= date <  '2016-01-07 13:30:00'")

у меня получилось для первого промежутка сделать это вручную

    date                Work_id
1   2016-01-04 20:15:00 0
2   2016-01-04 20:30:00 0
3   2016-01-04 20:45:00 0
4   2016-01-04 21:00:00 0
5   2016-01-04 22:00:00 0
6   2016-01-05 00:30:00 0
7   2016-01-05 11:00:00 0
8   2016-01-05 11:15:00 0
9   2016-01-05 11:45:00 0
10  2016-01-05 12:00:00 0
11  2016-01-05 12:30:00 0
12  2016-01-05 12:45:00 0
13  2016-01-05 13:00:00 0
14  2016-01-05 13:15:00 0

Как это можно сделать ?


Ответы (1 шт):

Автор решения: passant

Ну, примерно так:

df[(df['date'].dt.time>=dt.datetime.strptime('20:25:00','%H:%M:%S').time() ) 
  &(df['date'].dt.time<=dt.datetime.strptime('20:55:00','%H:%M:%S').time() )]

Конкретно на моих данных: было

df.date
Out[76]: 
0    2016-01-04 20:15:00
1    2016-01-04 20:30:00
2    2016-01-04 20:45:00
3    2016-01-04 21:00:00
4    2016-01-04 22:00:00
5    2016-01-05 20:15:00
6    2016-01-05 20:30:00
7    2016-01-05 20:45:00
8    2016-01-05 21:00:00
9    2016-01-05 22:00:00
10   2016-01-06 20:15:00
11   2016-01-06 20:30:00
12   2016-01-06 20:45:00
13   2016-01-06 21:00:00

стало:

Out[77]: 
1    2016-01-04 20:30:00
2    2016-01-04 20:45:00
6    2016-01-05 20:30:00
7    2016-01-05 20:45:00
11   2016-01-06 20:30:00
12   2016-01-06 20:45:00

А поскольку ВОСПРОИЗВОДИМОГО примера своего скрипта вы не привели - то дальше (конкретное условие, необходимость трансформации типов, название столбцов и пр.) под свою задачу тюнингуйте сами.

→ Ссылка