I can't find anything about cross join include the merge/join or some other. I need deal with two dataframe using {my function} as myfunc . the equivalent of :
{
for itemA in df1.iterrows():
for itemB in df2.iterrows():
t["A"] = myfunc(itemA[1]["A"],itemB[1]["A"])
}
the equivalent of :
{
select myfunc(df1.A,df2.A),df1.A,df2.A from df1,df2;
}
but I need more efficient solution: if used apply i will be how to implement them thx;^^
2 Answers
Create a common 'key' to cross join the two:
df1['key'] = 0
df2['key'] = 0
df1.merge(df2, on='key', how='outer')
For the cross product, see this question.
Essentially, you have to do a normal merge but give every row the same key to join on, so that every row is joined to each other across the frames.
You can then add a column to the new frame by applying your function:
new_df = pd.merge(df1, df2, on=key)
new_df.new_col = new_df.apply(lambda row: myfunc(row['A_x'], row['A_y']), axis=1)
axis=1 forces .apply to work across the rows. 'A_x' and 'A_y' will be the default column names in the resulting frame if the merged frames share a column like in your example above.