vlookup en Pandas usando join

Tengo los siguientes 2 marcos de datos

Example1 sku loc flag 122 61 True 123 61 True 113 62 True 122 62 True 123 62 False 122 63 False 301 63 True Example2 sku dept 113 a 122 b 123 b 301 c 

Quiero realizar una fusión, o unirme a la operación utilizando Pandas (o el operador de Python que sea mejor) para producir el siguiente dataframe.

 Example3 sku loc flag dept 122 61 True b 123 61 True b 113 62 True a 122 62 True b 123 62 False b 122 63 False b 301 63 True c Both df_Example1.join(df_Example2,lsuffix='_ProdHier') df_Example1.join(df_Example2,how='outer',lsuffix='_ProdHier') 

No estan trabajando ¿Qué estoy haciendo mal?

Realice una combinación a la left , esto usará la columna sku como la columna para unirse:

 In [26]: df.merge(df1, on='sku', how='left') Out[26]: sku loc flag dept 0 122 61 True b 1 122 62 True b 2 122 63 False b 3 123 61 True b 4 123 62 False b 5 113 62 True a 6 301 63 True c 

Si sku es de hecho su índice, entonces haga esto:

 In [28]: df.merge(df1, left_index=True, right_index=True, how='left') Out[28]: loc flag dept sku 113 62 True a 122 61 True b 122 62 True b 122 63 False b 123 61 True b 123 62 False b 301 63 True c 

Otro método es usar map , si establece sku como el índice en su segundo df, por lo que en efecto se convierte en una Serie, entonces el código se simplifica a esto:

 In [19]: df['dept']=df.sku.map(df1.dept) df Out[19]: sku loc flag dept 0 122 61 True b 1 123 61 True b 2 113 62 True a 3 122 62 True b 4 123 62 False b 5 122 63 False b 6 301 63 True c 

Una aplicación más genérica sería utilizar apply y lambda siguiente manera:

 dict1 = {113:'a', 122:'b', 123:'b', 301:'c'} df = pd.DataFrame([['1', 113], ['2', 113], ['3', 301], ['4', 122], ['5', 113]], columns=['num', 'num_letter']) 

Añadir como una nueva columna de dataframe

  **df['letter'] = df['num_letter'].apply(lambda x: dict1[x])** num num_letter letter 0 1 113 a 1 2 113 a 2 3 301 c 3 4 122 b 4 5 113 a 

O reemplace la columna existente (‘num_letter’)

  **df['num_letter'] = df['num_letter'].apply(lambda x: dict1[x])** num num_letter 0 1 a 1 2 a 2 3 c 3 4 b 4 5 a 

VLoopup en VBA es como pandas.dataframe.merge

Siempre busco tantos procedimientos para VBA en el pasado y ahora el dataframe de Python me ahorra un montón de trabajo, lo bueno es que no necesito escribir un método vlookup.

pandas.DataFrame.merge

 >>> A >>> B lkey value rkey value 0 foo 1 0 foo 5 1 bar 2 1 bar 6 2 baz 3 2 qux 7 3 foo 4 3 bar 8 >>> A.merge(B, left_on='lkey', right_on='rkey', how='outer') lkey value_x rkey value_y 0 foo 1 foo 5 1 foo 4 foo 5 2 bar 2 bar 6 3 bar 2 bar 8 4 baz 3 NaN NaN 5 NaN NaN qux 7 

También puedes probar lo siguiente para hacer una combinación a la izquierda.

 import pandas as pd pd.merge(left, right, left_on = 'key', right_on = 'key', how='left') 

acto externo o izquierdo, como SQL, la clase incorporada DataFrame de python tiene el método de fusión tomando muchos argumentos, que es muy detallado y práctico.