Я бы просто создал новый фрейм данных, в котором все значения id
повторялись бы 5 раз, а диапазон 1-5 повторялся n раз, n - это число id
ценности. Затем выполните внешнее слияние с исходным кадром данных:
new_df = (pd.merge(pd.DataFrame({'id':np.repeat(df['id'].unique(), 5),
'week':np.tile([1,2,3,4,5], df['id'].nunique())}),
df, how='outer'))
id week count
0 1 1 2.0
1 1 2 2.0
2 1 3 NaN
3 1 4 NaN
4 1 5 NaN
5 2 1 NaN
6 2 2 NaN
7 2 3 1.0
8 2 4 NaN
9 2 5 NaN
10 3 1 NaN
11 3 2 NaN
12 3 3 NaN
13 3 4 NaN
14 3 5 4.0