2017-10-18 5 views
-2

J'ai deux trames de données que je veux joindre dans les colonnes. L'index n'est pas unique:Joindre deux images sur des colonnes avec un index non unique

df1 = pd.DataFrame({'A': ['0', '1', '2', '2'],'B': ['B0', 'B1', 'B2', 'B3'],'C': ['C0', 'C1', 'C2', 'C3']}): 
    A B C 
0 0 B0 C0 
1 1 B1 C1 
2 2 B2 C2 
3 2 B3 C3 

df2 = pd.DataFrame({'A': ['0', '2', '3'],'E': ['E0', 'E1', 'E2']},index=[0, 2, 3]) 
    A E 
0 0 E0 
1 2 E1 
2 3 E2 

A doit être mon index. ce que je veux est:

A B C E 
0 0 B0 C0 E0 
1 1 B1 C1 NAN 
2 2 B2 C2 E1 
3 2 B3 C3 E1 

Cette pd.concat([df1, df2], 1) me donne l'erreur:

Reindexing only valid with uniquely valued Index objects 
+2

'pd.concat ([DF1, DF2], 1)' –

+0

Erreur: réindexation valable uniquement avec les objets index unique d'une valeur –

+0

réponse Posté ... –

Répondre

4

Peut-être que vous cherchez un externe gauchemerge.

df1.merge(df2, how='left') 
    A B C E 
0 0 B0 C0 E0 
1 1 B1 C1 NaN 
2 2 B2 C2 E1 
3 2 B3 C3 E1 
0

concaténer le long de l'axe de la colonne avec concat

import pandas as pd 

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3'],'C': ['C0', 'C1', 'C2', 'C3']},index=[0, 1, 2, 2]) 

df2 = pd.DataFrame({'D': ['D0', 'D1'],'E': ['E0', 'E1']},index=[0, 2]) 

df = pd.concat([df1, df2], axis=1) 

sortie:

A B C D E 
0 A0 B0 C0 D0 E0 
1 A1 B1 C1 NaN NaN 
2 A2 B2 C2 D1 E1 
2 A3 B3 C3 D1 E1 
+0

Erreur: réindexation uniquement valide avec des objets Index à valeur unique –

1

En utilisant combine_first

df1.combine_first(df2).dropna(subset=['A'],axis=0) 
Out[320]: 
    A B C D E 
0 A0 B0 C0 D0 E0 
1 A1 B1 C1 NaN NaN 
2 A2 B2 C2 D1 E1 
2 A3 B3 C3 D1 E1 

Après avoir modifié:

En utilisant combine_first

df1.combine_first(df2.set_index('A')) 
Out[338]: 
    A B C E 
0 0 B0 C0 E0 
1 1 B1 C1 NaN 
2 2 B2 C2 E1 
3 2 B3 C3 E2 

Ou

pd.concat([df1,df2.set_index('A')],axis=1) 
Out[339]: 
    A B C E 
0 0 B0 C0 E0 
1 1 B1 C1 NaN 
2 2 B2 C2 E1 
3 2 B3 C3 E2