0

I have two pandas Dataframes. df1 has a simple index. df2 on the other hand has a multi index. How can I combine the two in such a way that every possible combination alongside index1 is generated? The result should look similar to df3.

# %%
data1 = {"Value1": [1, 2]}
index1 = pd.Series(["A", "B"], name="Index1")
df1 = pd.DataFrame(data1, index=index1)
df1
# %%
data2 = {"Value2": [10, 20], "Value3": [100, 200]}
index_level1 = ("F", "G")
index_level2 = ("X", "Y")
multi_index1 = pd.MultiIndex.from_tuples(
    [index_level1, index_level2], names=["Index2", "Index3"]
)
df2 = pd.DataFrame(data2, index=multi_index1)
df2
#%%
data3 = {
    "Value1": [1, 2, 1, 2],
    "Value2": [10, 20, 20, 10],
    "Value3": [100, 200, 200, 100],
}
index_levels = [("A", "F", "G"), ("B", "X", "Y"), ("A", "X", "Y"), ("B", "F", "G")]
multi_index2 = pd.MultiIndex.from_tuples(
    index_levels, names=["Index1", "Index2", "Index3"]
)
df3 = pd.DataFrame(data3, index=multi_index2)
df3
Pm740
  • 339
  • 2
  • 12
  • 1
    `df1.reset_index().merge(df2.reset_index(), how='cross').set_index(['Index1_x', 'Index1_y', 'Index2'])` – Corralien Aug 14 '23 at 13:13

0 Answers0