Панды добавляют пропущенные ряды из другого отдела данных
pd.concat([df1, df2[~df2.isin(df1)].dropna()]).sort_values(['index','type','class']).reset_index(drop=True)
Thoughtful Toad