Comparando 2 columnas de dos marcos de datos de Python Pandas y obteniendo las filas comunes

Tengo 2 Dataframe de la siguiente manera:

DF1= ABCD 0 AA BA KK 0 1 AD BD LL 0 2 AF BF MM 0 DF2= KL 0 AA BA 1 AD BF 2 AF BF 

Al final lo que quiero conseguir es:

 DF1= ABCD 0 AA BA KK 1 1 AD BD LL 0 2 AF BF MM 1 

Entonces, quiero comparar dos marcos de datos, quiero ver qué filas del primer dataframe (para las columnas A y B) son comunes al segundo dataframe (Columna K y L) y asignar 1 en el mapa D de la primera ttwig de datos.

Puedo usar para bucle, pero será muy lento para un gran número de entradas.

Cualquier pista o sugerencia será apreciada.

Esto sería más fácil si cambiara el nombre de las columnas de df2 y luego pueda compararlas por filas:

 In [35]: df2.columns = ['A', 'B'] df2 Out[35]: AB 0 AA BA 1 AD BF 2 AF BF In [38]: df1['D'] = (df1[['A', 'B']] == df2).all(axis=1).astype(int) df1 Out[38]: ABCD 0 AA BA KK 1 1 AD BD LL 0 2 AF BF MM 1 

Así lo resolví:

 df1 = pd.DataFrame({"A":['AA','AD','AD'], "B":['BA','BD','BF']}) df2 = pd.DataFrame({"A":['AA','AD'], 'B':['BA','BF']}) df1['compressed']=df1.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1) df2['compressed']=df2.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1) df1['Success'] = df1['compressed'].isin(df2['compressed']).astype(int) print df1 AB compressed Success 0 AA BA AABA 1 1 AD BD ADBD 0 2 AD BF ADBF 1 

DF1.merge(right=DF2,left_on=[DF1.A,DF1.B],right_on=[DF2.K,DF2.L], indicator=True, how='left')

da:

ABCDKL _merge 0 AA BA KK 0 AA BA both 1 AD BD LL 0 NaN NaN left_only 2 AF BF MM 0 AF BF both

Entonces, como arriba, el indicador hace el trabajo.

Peter