2017-09-29 2 views
0

Compte tenu des dataframes suivantes:Pandas: vertical rechercher à l'aide de deux colonnes et deux trames de données

DF1:

ID A   B   
0 0 138.610513 34.860445 
2 2 139.307536 34.919052  

DF2:

ID A   B   CAT 
0 0 138.610513 34.860445 a 
1 1 138.523152 34.807862 b 
2 2 139.307536 34.919052 c 
3 3 138.620263 34.883671 b 

Comment puis-je regarder les valeurs CAT et les ajouter à df1 comme une nouvelle colonne?

J'ai essayé:

df1['CAT']=df1[['A'],['B']].map(df2[['A'],['B']]) 

mais je reçois:

TypeError: unhashable type: 'list' 

Sortie prévue:

DF1:

ID A   B   CAT 
0 0 138.610513 34.860445 a 
2 2 139.307536 34.919052 c 

Ceci est juste un test. Dans mon vrai problème, je ne peux pas utiliser les identifiants comme référence car ils ne sont pas cohérents.

Répondre

1

Utilisez merge. On dirait que id est également mappé.

In [4820]: df1.merge(df2) 
Out[4820]: 
    ID   A   B CAT 
0 0 138.610513 34.860445 a 
1 2 139.307536 34.919052 c 

Sinon, spécifiez les clés dans on, et choisir de manière sélective les colonnes nécessaires df2

In [4825]: df1.merge(df2[['A', 'B', 'CAT']], on=['A', 'B']) 
Out[4825]: 
    ID   A   B CAT 
0 0 138.610513 34.860445 a 
1 2 139.307536 34.919052 c 
+0

si 'df2' a un tas de colonnes que je ne ai pas besoin? Que faire si j'ai seulement besoin de 'CAT'? J'ai précisé que les identifiants sont différents dans mon cas réel. – FaCoffee