удалить строки по интервалам времени pandas

Приветствую) Не могу найти как это сделать. есть такая вот таблица. Какой командой удалить можно строки которые поподают в интервал с 20:00 до 21:00?

введите сюда описание изображения


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

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

Как-то так должно работать, хотя 21:00 тут останется, но принцип думаю понятен:

df = df.loc[(df.index.hour < 20) | (df.index.hour >= 21)]

Чтобы совсем точно сделать сравнение, сделайте так:

import datetime
df = df.loc[(df.index.time < datetime.time(20)) | (df.index.time > datetime.time(21))]

В целом смысл в том, что нужно не удалять не нужное, а наоборот - оставить только нужное, перезаписав DataFrame.

→ Ссылка
Автор решения: MaxU

Пример данных:

In [41]: df = pd.DataFrame(
    ...:             {"val": np.random.randint(10, size=10)},
    ...:             index=pd.date_range("2020-01-01 19:00:00", periods=10, freq="30T")
    ...:         )
    ...:

In [42]: df
Out[42]:
                     val
2020-01-01 19:00:00    7
2020-01-01 19:30:00    6
2020-01-01 20:00:00    8
2020-01-01 20:30:00    2
2020-01-01 21:00:00    6
2020-01-01 21:30:00    9
2020-01-01 22:00:00    5
2020-01-01 22:30:00    2
2020-01-01 23:00:00    1
2020-01-01 23:30:00    7

решение для удаления дат из интервала [20:00, 21:00) (NOTE: правая граница интервала открытая):

res = df.query("index.dt.hour != 20")

результат:

In [59]: res
Out[59]:
                     val
date
2020-01-01 19:00:00    7
2020-01-01 19:30:00    6
2020-01-01 21:00:00    6
2020-01-01 21:30:00    9
2020-01-01 22:00:00    5
2020-01-01 22:30:00    2
2020-01-01 23:00:00    1
2020-01-01 23:30:00    7
→ Ссылка
Автор решения: MaxU

Вариант удаляющий даты с учетом обоих концов интервала - т.е. и 20:00 и 21:00 будут удалены из результата:

idxs = df.index.indexer_between_time(
    "20:00", 
    "21:00", 
    include_start=True,
    include_end=True)

res = df.iloc[pd.Index(np.arange(len(df))).difference(idxs)]

In [75]: res
Out[75]:
                     val
date
2020-01-01 19:00:00    7
2020-01-01 19:30:00    6
2020-01-01 21:30:00    9
2020-01-01 22:00:00    5
2020-01-01 22:30:00    2
2020-01-01 23:00:00    1
2020-01-01 23:30:00    7
→ Ссылка