idx = df1.stack().index
dfs = [df1, df2]
dflabels = ['df1', 'df2']
a = np.stack([d.values.flatten() for d in dfs], axis=1)
df3 = pd.DataFrame(a, index=idx, columns=dflabels).stack().unstack(1)
объединить два кадра данных по строке с одинаковыми пандами индекса