2015-12-08 4 views
2

Я не могу найти ничего о перекрестном соединении, включая объединение/объединение или другое. Мне нужно иметь дело с двумя кадрами данных, используя {my function} как myfunc. эквивалент:pandas two dataframe cross join

{ 
    for itemA in df1.iterrows(): 
      for itemB in df2.iterrows(): 
         t["A"] = myfunc(itemA[1]["A"],itemB[1]["A"]) 
}  

эквивалент:

{ 
select myfunc(df1.A,df2.A),df1.A,df2.A from df1,df2; 
} 

, но мне нужно более эффективное решение: при использовании применять я буду, как реализовать их ТНХ; ^^

+0

ты это получилось? Прокомментируйте мой ответ, если у вас есть вопросы. – leroyJr

ответ

1

Для перекрестный продукт, см. this question.

По существу, вы должны выполнить нормальное слияние, но дать каждой строке один и тот же ключ для соединения, чтобы каждая строка была соединена друг с другом по кадрам.

Вы можете добавить столбец в новый кадр, применяя вашу функцию:

new_df = pd.merge(df1, df2, on=key) 
new_df.new_col = newdf.apply(lambda row: myfunc(row['A_x'], row['A_y']), axis=1) 

axis=1 силы .apply работать по рядам. «A_x» и «A_y» будут именами столбцов по умолчанию в результирующем фрейме, если объединенные фреймы совместно используют столбец, как в вашем примере.

1

Создать общий «ключ», чтобы пересечь присоединиться к два:

df1['key'] = 0 
df2['key'] = 0 

df1.merge(df2, how='outer')