Работа с Датами в Python. Как сделать лучше?
У меня есть таблица с полями:
ID - id клиента
office - офис в котором было обслуживание
contract- номер договора
start_day - день заключения нового договора
due_date - день закрытия договора
safe - номер ячейки
Задача:
По каждому пользователю (столбец ID) посчитать сколько раз был открыт новый договор (столбцы договор и дата начала) в один день с закрытием предыдущего договора (столбец дата завершения (факт))
У меня получилось решить следующим образом, но мне кажется это не самый эффективный вариант:
array_id = df.id.unique()
for id_person in array_id:
# Оставим строки только с id_person
sort_df = df.loc[df['id']==id_person]
# Превртим строки в список с датами новых договоров
start_day = set(sort_df.start_day)
start_date_list = [ ts.date() for ts in start_day ]
start_date_str_list = [ str(date) for date in start_date_list ]
# Превртим строки в список с датами закрытия договоров
due_date = set(sort_df.due_date)
due_date_list = [ ts.date() for ts in due_date ]
due_date_str_list = [ str(date) for date in due_date_list ]
count = 0
# Пройдемся по списку дат закрытия
for date in due_date_str_list:
# Если дата закрытия есть в списке с датами открытия новых договорв то счетчику
прибавим 1
if date in start_date_str_list:
count +=1
# если счетчик больше или равен 1 то напичатаем id и кол-во таких событий
if count >= 1:
print(f'У пользователя c ID :{id_person} - {count} был открыт новый/ых договор/ов в один день с закрытием предыдущего')