Если у вас нет перекрывающихся столбцов, не хотите их добавлять, а индексы кадров данных могут быть отброшены, это может быть проще:
df1.index[:] = df2.index[:] = 0
df_cartesian = df1.join(df2, how='outer')
df_cartesian.index[:] = range(len(df_cartesian))