АМ
#cсоздаю df по длинне когорт
>>> df = pd.DataFrame(columns=['lib', 'cogort1', ''cogort2'])
#обхожу все строки
>>> for i in range(5):
#формирую строку с длинной рвыной количеству столбцов, но надо контролировать пустые строчки в месяцах, что нет
>>> df.loc[i] = ['name' + str(i)] + list(randint(10, size=2))
но что, то тоже запутался)
Чтобы построить нужную таблицу вы можете использовать pivot_table(). Вот пример:
df.pivot_table(index='registration', columns = 'cogort_month', values='money', aggfunc = 'sum')
Вышеприведенная функция построит сводную таблицу, где в колонках будут месяца наблюдений, но они будут абсолютные. Если вам нужно подсчитать относительный месяц, то вы можете сделать вот так df['nb_months'] = (df.cogort_month - df.registration)/ np.timedelta64(1, 'M'). Тогда в колонке nb_months будет порядковый месяц относительно месяца регистрации. И уже потом эту колонку используйте в параметре columns при построении сводной.



