Для фрейма данных, содержащего время начала и окончания, я хотел бы «инвертировать» это время для данной даты. Конечно, есть метод "грубой силы", который делает это, циклически перебирая фрейм данных и имея много условий if, но мне интересно, есть ли более элегантный способ, например, с backfill / forwardfill.
Считайте, что в нем есть фрейм данных, в котором рабочее время представлено строками с временем начала и окончания, а в конечном итоге мне нужно свободное время этой даты.
Кадр данных упорядочен с монотонным увеличением времени начала и имеет отсечки при смене даты, поэтому время начинается, например, с. 2019-04-04 22:00 и заканчивающийся в 2019-04-05 04:00 представлен двумя строками 2019-04-04 с 22:00 до 2019-04-05 00:00 и 2019-04-05 00:00 до 2019-04-05 04:00. Это должно облегчить проблему.
Код для примера:
import pandas as pd
import datetime
df = pd.DataFrame({'date': [datetime.date(2019, 4, 4), datetime.date(2019, 4, 5), datetime.date(2019, 4, 5)],
'start': [pd.Timestamp(2019, 4, 4, 10), pd.Timestamp(2019, 4, 5, 0), pd.Timestamp(2019, 4, 5, 14)],
'end': [pd.Timestamp(2019, 4, 4, 16), pd.Timestamp(2019, 4, 5, 4), pd.Timestamp(2019, 4, 5, 18)]})
Итак, начиная с этого:
2019-04-04 2019-04-04 10:00:00 2019-04-04 16:00:00
2019-04-05 2019-04-05 00:00:00 2019-04-05 04:00:00
2019-04-05 2019-04-05 14:00:00 2019-04-05 18:00:00
Я ожидал бы, что результатом будет такой фрейм данных:
2019-04-04 2019-04-04 00:00:00 2019-04-04 10:00:00
2019-04-04 2019-04-04 16:00:00 2019-04-05 00:00:00
2019-04-05 2019-04-05 04:00:00 2019-04-05 14:00:00
2019-04-05 2019-04-05 18:00:00 2019-04-06 00:00:00
Любая помощь очень ценится.