создать фрейм данных из мультииндексов всех возможных индексов
ind = pd.MultiIndex.from_product(
[['p1', 'p2'], ['SKU1', 'SKU2' ,'SKU3']]
).to_frame().reset_index(drop=True).rename({0:'proid', 1: 'sku'}, axis=1)
левое соединение с оригинальным фреймом данных
ind.merge(df, on=['proid', 'sku'], how='left').fillna(0)
выводит:
proid sku qty
0 p1 SKU1 1.0
1 p1 SKU2 0.0
2 p1 SKU3 2.0
3 p2 SKU1 3.0
4 p2 SKU2 0.0
5 p2 SKU3 0.0
альтернативно,создать мультииндекс и переиндексировать исходный фрейм данных, заполнив нулями 0
ind2 = pd.MultiIndex.from_product(names=['proid', 'sku'],
iterables=[['p1', 'p2'], ['SKU1', 'SKU2' ,'SKU3']])
df.set_index(['proid', 'sku']).reindex(ind2, fill_value=0).reset_index()