Pandas dataframe Cartesian join Pandas dataframe Cartesian join numpy numpy

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