Zusammenführen von Datenrahmen im Index mit Pandas

74

Ich habe zwei Datenrahmen und jeder hat zwei Indexspalten. Ich möchte sie zusammenführen. Der erste Datenrahmen ist beispielsweise der folgende:

                   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

Der zweite Datenrahmen ist der folgende:

                   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

und als Ergebnis möchte ich folgendes bekommen:

                   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

Ich habe einige Versionen mit den Methoden pd.mergeund ausprobiert .join, aber nichts scheint zu funktionieren. Hast du irgendwelche Vorschläge?

km1234
quelle
Versuchen Sie es mit pd.concat ... das sollte funktionieren. pandas.pydata.org/pandas-docs/stable/generated/… .. Sie können die Achse auswählen, an der Sie die Datenrahmen verbinden möchten.
Joey

Antworten:

94

Sie sollten in der Lage sein, joinstandardmäßig den Index zu verknüpfen. In Anbetracht Ihres gewünschten Ergebnisses müssen Sie outerals Verknüpfungstyp verwenden.

>>> 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

Signatur: _.join (other, on = None, how = 'left', lsuffix = '', rsuffix = '', sort = False) Docstring: Verbinden Sie Spalten mit anderen DataFrames entweder im Index oder in einer Schlüsselspalte. Verbinden Sie mehrere DataFrame-Objekte effizient durch Index gleichzeitig, indem Sie eine Liste übergeben.

Alexander
quelle
55

Sie können dies tun mit merge:

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

Das Schlüsselwortargument how='outer'behält alle Indizes aus beiden Frames bei und füllt fehlende Indizes mit aus NaN. Die Argumente left_indexund right_indexSchlüsselwortargumente müssen für die Indizes zusammengeführt werden. Wenn Sie NaNnach dem Zusammenführen alle Informationen in einer Spalte erhalten, besteht ein weiterer Schritt zur Fehlerbehebung darin, zu überprüfen, ob Ihre Indizes dieselben haben dtypes.

Der mergeobige Code erzeugt für mich die folgende Ausgabe:

                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
Wurzel
quelle
1
Nützliche Erklärungen und eine vielseitigere Lösung als akzeptiert. Natürlich ist auch das Erwähnen join()nützlich.
RockyRoad