92 votes

Fusion de trames de données sur un index avec des pandas

J'ai deux dataframes et chacun a deux colonnes d'index. Je voudrais les fusionner. Par exemple, la première trame de données est la suivante:

                    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
 

La deuxième trame de données est la suivante:

                    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 en conséquence, 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?

108voto

Alexander Points 49390

Vous devriez pouvoir utiliser join , qui se joint à l'index par défaut. É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 (other, on = None, how = 'left', lsuffix = '', rsuffix = '', sort = False) Docstring: Joignez des colonnes avec d'autres DataFrame soit sur l'index, soit sur une colonne clé. Joignez efficacement plusieurs objets DataFrame par index à la fois en passant une liste.

77voto

root Points 15363

Vous pouvez faire cela avec merge:

df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True)

L'argument mot-clé how='outer' conserve tous les indices à partir de deux images, en remplissant les index manquants avec NaN. L' left_index et right_index mot-clé arguments ont la fusion être fait sur les indices. Si vous obtenez tous NaN dans une colonne après avoir fait une fusion, une autre étape de dépannage consiste à vérifier que vos indices ont le même dtypes.

L' merge code ci-dessus génère 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X