df = df.set_index('week')

def reindex_by_max_index_of_group(df):
    index = list(range(1, max(df.index) + 1))
return df.reindex(index, fill_value=0)
df = df.groupby('product').apply(reindex_by_max_index_of_group)
df.drop(['product'], inplace=True, axis=1)
print(df.reset_index())
Скользящая сумма Pandas с неравномерным индексом