Рассчитать количество пользователей в месяц, сгруппированных по первому месяцу, python

Мне нужно подсчитать количество пользователей за каждый месяц, сгруппировав их по месяцам первого посещения. Есть таблица visit, содержащая данные: id — номер пользователя, FirstVisit — дата первого посещения, LastVisit — дата последнего посещения.

id FirstVisit LastVisit
1 03.02.2021 10.10.2021
2 10.02.2021 12.12.2021
3 15.01.2021 01.02.2022
4 14.05.2021 04.03.2022
5 12.05.2021 15.05.2021
1 03.02.2021 10.10.2021
3 15.01.2021 01.02.2022

В результате мне нужно создать фрейм данных:

FirstVisit Month cnt
2021.01 2021.01 1
2021.01 2021.02 1
2021.01 2021.03 1
2021.01 2021.04 1
2021.01 2021.05 1
2021.01 2021.06 1
2021.01 2021.07 1
2021.01 2021.08 1
2021.01 2021.09 1
2021.01 2021.10 1
2021.01 2021.11 1
2021.01 2021.12 1
2021.01 2022.01 1
2021.01 2022.02 1
2021.02 2021.02 2
2021.02 2021.03 2
2021.02 2021.04 2
2021.02 2021.05 2
2021.02 2021.06 2
2021.02 2021.07 2
2021.02 2021.08 2
2021.02 2021.09 2
2021.02 2021.10 2
2021.02 2021.11 1
2021.02 2021.12 1
2021.05 2021.05 2
2021.05 2021.06 1
2021.05 2021.07 1
2021.05 2021.08 1
2021.05 2021.09 1
2021.05 2021.10 1
2021.05 2021.11 1
2021.05 2021.12 1
2021.05 2022.01 1
2021.05 2022.02 1
2021.05 2022.03 1

Я создал функцию для подсчета количества пользователей за каждый месяц:

fun = lambda m:np.where((visit.FirstVisit <=m) & (visit.LastVisit >=m),visit.inn,0)
df=pd.DataFrame(pd.date_range(visit.FirstVisit.min(),visit.LastVisit.max(), freq='M').strftime('%Y-%m'),columns=['Month'])
df['cnt']=df.Month.map(lambda x:np.count_nonzero(np.unique(fun(x))))

Но не могу добавить группировку по полю FirstVisit. Создал примерный цикл, как вижу результат, но пока не правильный

for i in (pd.date_range(visit.FirstVisit.min(),visit.FirstVisit.max(),freq='M').strftime('%Y-%m')):

for m in (pd.date_range(visit.FirstVisit.min(),visit.LastVisit.max(),freq='M').strftime('%Y-%m')):

    if (pd.to_datetime(visit.FirstVisit, format ='%Y-%m')==i) & (visit.FirstVisit<=m) & (visit.LastVisit >= m) :

        df1=df1.append({'FirstVisit': i,'Months': m,'cnt': df1.Month.map(lambda x:np.count_nonzero(np.unique(fun(x))))})

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