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