У меня есть некоторые данные, содержащие информацию о бронировании номера в отеле, которая выглядит следующим образом:
user_id h_name h_capacity check_in_date check_out_date
1 A1 2 2019-01-01 2019-01-05
2 A1 2 2019-01-02 2019-01-05
3 A1 2 2019-01-02 2019-01-03
4 A2 3 2019-01-02 2019-01-04
5 A2 3 2019-01-04 2019-01-05
user_id
: идентификатор клиента
h_name
: название отеля
h_capacity
: максимальное количество номеров в отеле.
check_in_date
& check_out_date
: не требует пояснений.
Моя цель - выяснить, какие отелипроверка людей на предмет их предписанной вместимости.
Подход, который я попробовал, включает в себя создание новых столбцов для каждой даты, что приводит к приведенному выше образцу данных.Это будет выглядеть следующим образом:
<...> 2019-01-01 2019-01-02 2019-01-03 2019-01-04 2019-01-05
<...> 0 0 0 0 0
<...> 0 0 0 0 0
<...> 0 0 0 0 0
<...> 0 0 0 0 0
<...> 0 0 0 0 0
<...>
представляет столбцы, которые присутствуют в первом кадре данных, показанном вверху.
После выполнения вышесказанного я хочу вставить цифру 1 в столбцы дат, в которые пользователь проживает в отеле. Результат будет выглядеть следующим образом:
<...> 2019-01-01 2019-01-02 2019-01-03 2019-01-04 2019-01-05
<...> 1 1 1 1 1
<...> 0 1 1 1 1
<...> 0 1 1 0 0
<...> 0 1 1 1 0
<...> 0 0 0 1 1
<...>
представляет столбцы, которые присутствуют в образце, показанном вверху.
И в конце я бы просто использовал суммирование для h_name, чтобы получить общее количество занятых коек в день.
Проблема в том, что я не могу заполнить фрейм данных, как показано выше, значением 1
в столбцах дат, когда человек занял комнату. Это включает в себя заполнение значения в разные столбцы для каждой строки, что означает, что для пользователя мне нужно будет вставить 1
в столбцы, представляющие даты, в которые они останавливались в отеле. Я не мог понятьМы нашли оптимальное решение для этого и в итоге использовали цикл for
, выполнение которого заняло 32 минуты.
Я скромно требую оптимального решения для этого.(Обратите внимание: данные имеют 500 тыс. Строк)