J'ai deux dataframes et chacun a deux colonnes d'index. Je voudrais les fusionner. Par exemple, le premier cadre de données est le suivant:
V1
A 1/1/2012 12
2/1/2012 14
B 1/1/2012 15
2/1/2012 8
C 1/1/2012 17
2/1/2012 9
Le deuxième cadre de données est le suivant:
V2
A 1/1/2012 15
3/1/2012 21
B 1/1/2012 24
2/1/2012 9
D 1/1/2012 7
2/1/2012 16
et comme résultat je voudrais obtenir ce qui suit:
V1 V2
A 1/1/2012 12 15
2/1/2012 14 N/A
3/1/2012 N/A 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 7 N/A
2/1/2012 16 N/A
D 1/1/2012 N/A 7
2/1/2012 N/A 16
J'ai essayé quelques versions en utilisant les méthodes pd.merge
et .join
, mais rien ne semble fonctionner. Avez-vous des suggestions?
Vous devriez pouvoir utiliser join
, qui se joint par défaut à l'index. Étant donné le résultat souhaité, vous devez utiliser outer
comme type de jointure.
>>> df1.join(df2, how='outer')
V1 V2
A 1/1/2012 12 15
2/1/2012 14 NaN
3/1/2012 NaN 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 17 NaN
2/1/2012 9 NaN
D 1/1/2012 NaN 7
2/1/2012 NaN 16
Signature: _.join (autre, on = Aucun, comment = 'gauche', lsuffix = '', rsuffix = '', sort = False) Chaîne de lignes: Joignez des colonnes à d'autres DataFrame soit sur index, soit sur une colonne clé. Joignez efficacement plusieurs objets DataFrame par index à la fois en transmettant une liste.
Vous pouvez le faire avec merge
:
df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True)
Le mot clé argument how='outer'
conserve tous les index des deux cadres, en remplissant les index manquants avec NaN
. Les arguments de mot clé left_index
et right_index
doivent être fusionnés sur les index. Si vous obtenez tout NaN
dans une colonne après une fusion, une autre étape de dépannage consiste à vérifier que vos index ont le même dtypes
.
Le code merge
ci-dessus produit la sortie suivante pour moi:
V1 V2
A 2012-01-01 12.0 15.0
2012-02-01 14.0 NaN
2012-03-01 NaN 21.0
B 2012-01-01 15.0 24.0
2012-02-01 8.0 9.0
C 2012-01-01 17.0 NaN
2012-02-01 9.0 NaN
D 2012-01-01 NaN 7.0
2012-02-01 NaN 16.0