Исправление расписания функции комнаты для собраний с двойным и тройным бронированием для определения использования пространства - PullRequest
1 голос
/ 20 октября 2019

Мне нужно рассчитать общее количество времени, в течение которого каждая группа использует место для собраний. Но набор данных имеет двойное и тройное бронирование, поэтому я думаю, что мне нужно сначала исправить данные. Раскрытие информации: мой опыт написания кода состоит исключительно из прохождения нескольких курсов Dataquest, и это моя первая публикация в стеке, поэтому я прошу прощения за ошибки и нарушения.

Каждая строка набора данных содержит идентификатор группы, а также время начала и окончания. Он также включает в себя тип бронирования, т.е. зарезервировано, совещание и т. д. Обычно сотрудники резервируют место на весь период, который создает одну строку, а затем добавляет несколько строк для каждой отдельной функции, когда детали известны. Они должны сегментировать исходную зарезервированную строку, чтобы она содержала только пробел между функциями, но вместо этого они удваивают пространство, поэтому мне нужно добавить несколько строк для этих промежуточных удержаний RES, основываясь на фактических удержаниях.

Вот как в основном выглядят данные:

Существующие данные:

functions = [['Function', 'Group', 'FunctionType', 'StartTime', 'EndTime'],
[01,01,'RES',2019/10/04 07:00,2019/10/06 17:00],
[02,01,'MTG',2019/10/05 09:00,2019/10/05 12:00],
[03,01,'LUN',2019/10/05 12:30,2019/10/05 13:30],
[04,01,'MTG',2019/10/05 14:00,2019/10/05 17:00],
[05,01,'MTG',2019/10/06 09:00,2019/10/06 12:00]]

Я пытался выполнить итерацию с использованием цикла for:


for index, row in enumerate(functions):
    last_row_index = len(functions) - 1

    if index == last_row_index:
        pass
    else:
        current_index = index
        next_index = index + 1

    if row[3] <= functions[next_index][2]:
        next
    elif row[4] == 'RES' or row[6] < functions[next_index][6]:
        copied_current_row = row.copy()
        row[3] = functions[next_index][2]
        copied_current_row[2] = functions[next_index][3] 
        functions.append(copied_current_row)

Кажется, здесь есть логическая проблема, потому что последняя строка добавления, кажется, помещает программу в какой-то цикл, и мне приходится вручную прерывать ее. Так что я уверен, что это очевидно для кого-то опытного, но я довольно новый.

Причина, по которой я сделал сравнение, чтобы увидеть, является ли функция RES, заключается в том, что зарезервированное должно быть подчинено фактическим функциям. Но иногда есть реальные совпадения между реальными функциями, поэтому мне нужно создать другое сравнение, чтобы решить, какое из них имеет приоритет, но это то, с чего я начинаю.

Как я (думаю) хочу, чтобы все закончилось:

[['Function', 'Group', 'FunctionType', 'StartTime', 'EndTime'],
[01,01,'RES',2019/10/04 07:00,2019/10/05 09:00],
[02,01,'MTG',2019/10/05 09:00,2019/10/05 12:00],
[01,01,'RES',2019/10/05 12:00,2019/10/05 12:30],
[03,01,'LUN',2019/10/05 12:30,2019/10/05 13:30],
[01,01,'RES',2019/10/05 13:30,2019/10/05 14:00],
[04,01,'MTG',2019/10/05 14:00,2019/10/05 17:00],
[01,01,'RES',2019/10/05 14:00,2019/10/06 09:00],
[05,01,'MTG',2019/10/06 09:00,2019/10/06 12:00],
[01,01,'RES',2019/10/06 12:00,2019/10/06 17:00]]

Таким образом, я мог бы сделать простой расчет прошедшего времени для каждой строки функции и сложить его, чтобы увидеть, какМного времени у них было забронировано место.

То, что я ищу здесь, - это просто какое-то направление, которому я должен следовать, и я определенно не ожидаю, что кто-нибудь сделает за меня эту работу. Например, я нахожусь на правильном пути здесь, или было бы лучше использовать панды и векторизованные функции? Если я смогу правильно понять основное направление, я думаю, что смогу разобраться в специфике.

Большое спасибо, AF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...