web-dev-qa-db-fra.com

Python - fonction similaire à VLOOKUP (Excel)

j'essaie de joindre deux trames de données, mais je n'arrive pas à me faire une idée des possibilités offertes par Python.

Première donnée:

ID MODEL   REQUESTS ORDERS
1  Golf    123      4
2  Passat  34       5
3  Model 3 500      8
4  M3      5        0

Deuxième dataframe:

MODEL   TYPE  MAKE
Golf    Sedan Volkswagen
M3      Coupe BMW
Model 3 Sedan Tesla

Ce que je veux, c'est ajouter une autre colonne dans le premier cadre de données appelée "make" afin qu'elle ressemble à ceci:

ID MODEL   MAKE       REQUESTS ORDERS
1  Golf    Volkswagen 123      4
2  Passat  Volkswagen 34       5
3  Model 3 Tesla      500      8
4  M3      BMW        5        0

J'ai déjà examiné fusionner, joindre et mapper, mais tous les exemples ajoutaient simplement les informations requises à la fin du cadre de données.

6
Christian

Je pense que vous pouvez utiliser insert with map by Series créé avec df2 (si une valeur de la colonne MODEL dans df2 est manquante, obtenez NaN):

df1.insert(2, 'MAKE', df1['MODEL'].map(df2.set_index('MODEL')['MAKE']))
print (df1)
   ID    MODEL        MAKE  REQUESTS  ORDERS
0   1     Golf  Volkswagen       123       4
1   2   Passat         NaN        34       5
2   3  Model 3       Tesla       500       8
3   4       M3         BMW         5       0
6
jezrael

Bien que ce ne soit pas le cas dans ce cas, mais il peut exister des scénarios dans lesquels df2 comporte plus de deux colonnes et vous souhaitez simplement en ajouter un à df1 en fonction d'une colonne spécifique en tant que clé. Voici un code générique qui pourrait vous être utile.

df = pd.merge(df1, df2[['MODEL', 'MAKE']], on = 'MODEL', how = 'left')
0
Bhagabat Behera

La méthode join agit de manière très similaire à VLOOKUP. Il joint une colonne du premier cadre de données à l'index du deuxième cadre de données. Vous devez donc définir MODEL comme index du deuxième cadre de données et ne saisir que la colonne MAKE.

df.join(df1.set_index('MODEL')['MAKE'], on='MODEL')

Jetez un coup d’œil à la documentation pour join , car elle utilise réellement Word VLOOKUP.

0
Ted Petrou

J'ai toujours trouvé que la fusion était un moyen facile de le faire:

df1.merge(df2[['MODEL', 'MAKE']], how = 'left')

Cependant, je dois admettre que ce ne serait pas aussi court et agréable si vous vouliez appeler la nouvelle colonne autrement que "MAKE".

0
Yona