Работа с Датами в 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} был открыт новый/ых договор/ов в один день с закрытием предыдущего')

      

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