Sum all combinations of 2 columns from 2 dataframes

Solution 1:

Use MultiIndex.from_product for all combinations and sum DataFrames with repeated values by DataFrame.reindex:

mux = pd.MultiIndex.from_product([df1.columns, df2.columns])

df = df1.reindex(mux, level=0, axis=1) + df2.reindex(mux, level=1, axis=1)
df.columns = range(len(df.columns))

Solution 2:

IIUC you can do this with numpy.

>>> import numpy as np
>>> n = df1.shape[1]
>>> pd.DataFrame(df1.values.repeat(n) + np.tile(df2.values, n))
    0   1   2   3
0  11  12  21  22