Pandas dataframe Cartesian join
Create a surrogate key to do a cartesian join between them...
import pandas as pddf1 = pd.DataFrame({'A': [1, 0, 2], 'B': [2, 0, 1], 'tmp': 1})df2 = pd.DataFrame({'l1': ['a', 'b'], 'l2': ['a', 'c'], 'tmp': 1})print pd.merge(df1, df2, on='tmp', how='outer')
Result:
A B tmp l1 l2 0 1 2 1 a a 1 1 2 1 b c 2 0 0 1 a a 3 0 0 1 b c 4 2 1 1 a a 5 2 1 1 b c
Here's an alternate solution:
import pandas as pd df1 = pd.DataFrame({'val1': [1,0,2], 'val2': [2,0,1])df2 = pd.DataFrame({'l1': ['a', 'b'], 'l2': ['a', 'c'])df_list = []for x in df1.index: series = df1.iloc[x, :] series_list = [series for _ in range(len(df2.index))] temp_df = pd.DataFrame(series_list, index=range(len(df2.index))) df_list.append(pd.concat((temp_df, df2), axis=1, join='inner'))final_df = pd.concat(df_list)
Which produces:
final_df val1 val2 l1 l20 1 2 a a1 1 2 b c0 0 0 a a1 0 0 b c0 2 1 a a1 2 1 b c