Pandas DataFrames auf Index zusammenführen

Manav Narula 26 Dezember 2020
  1. Verwenden Sie merge(), um zwei Pandas DataFrames im Index zu kombinieren
  2. Verwenden Sie join(), um zwei Pandas DataFrames auf dem Index zu kombinieren
Pandas DataFrames auf Index zusammenführen

In der Welt der Data Science und des maschinellen Lernens ist es unerlässlich, die Operationen zum Organisieren, Verwalten und Bereinigen von Daten für die weitere Analyse zu beherrschen. Das Zusammenführen von zwei DataFrames ist ein Beispiel für eine solche Operation. Es stellt sich heraus, dass es einfach ist, zwei DataFrames mit Hilfe der Pandas-Bibliothek in Python zu kombinieren.

Pandas bietet uns zwei nützliche Funktionen, merge() und join(), um zwei DataFrames zu kombinieren. Beide Methoden sind sich sehr ähnlich, aber merge() gilt als vielseitiger und flexibler. Sie bietet auch viele Parameter, um das Verhalten des endgültigen DataFrames zu verändern. join() kombiniert die beiden DataFrames über ihre Indizes, während merge() uns erlaubt, die Spalten zu spezifizieren, die als Schlüssel zum Zusammenführen zweier DataFrames dienen können.

Ein gemeinsamer Parameter dieser beiden Funktionen, mit dem man vertraut sein sollte, ist how, der den Typ der Verknüpfung definiert. Standardmäßig ist der how-Parameter inner für merge() und left für join(), aber für beide kann er in left, right, inner und outer geändert werden. Es ist wichtig, den Unterschied zwischen all diesen Begriffen zu kennen.

Wenn wir zwei Pandas DataFrames kombinieren, nehmen wir an, dass einer der linke DataFrame und der andere der rechte DataFrame ist. Sowohl merge() als auch join() gleichen die Datensätze der Schlüsselspalten ab. Die innere Verknüpfung gibt einen DataFrame mit Datensätzen zurück, die in beiden DataFrames übereinstimmen. Die outer-Verknüpfung erzeugt einen zusammengeführten DataFrame mit allen Elementen in beiden DataFrames und füllt NaN für fehlende Werte auf beiden Seiten. Die Verknüpfung left enthält alle Elemente des linken DataFrames, aber nur die übereinstimmenden Datensätze des rechten DataFrames. Das Gegenteil von left ist right, das alle Elemente des rechten DataFrame und nur die übereinstimmenden Datensätze des linken DataFrame enthält. All dies wird im Beispielcode in den kommenden Abschnitten deutlicher, wo wir die DataFrames im folgenden Code kombinieren werden:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

print(df1)
print(df2)

Ausgabe:

  C1
1  a
2  b
4  d
5  e
7  h
   C2
1  AA
2  BB
3  CC
5  EE
6  FF

Verwenden Sie merge(), um zwei Pandas DataFrames im Index zu kombinieren

Wenn Sie zwei DataFrames auf dem Index zusammenführen, sollte der Wert der Parameter left_index und right_index der Funktion merge() auf True stehen. Das folgende Codebeispiel kombiniert zwei DataFrames mit inner als Verknüpfungstyp:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_inner = df1.merge(df2, how="inner", left_index=True, right_index=True)

print(df_inner)

Ausgabe:

  C1  C2
1  a  AA
2  b  BB
5  e  EE

Der folgende Code wird die DataFrames mit dem Join-Typ outer zusammenführen:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_outer = df1.merge(df2, how="outer", left_index=True, right_index=True)

print(df_outer)

Ausgabe:

    C1   C2
1    a   AA
2    b   BB
3  NaN   CC
4    d  NaN
5    e   EE
6  NaN   FF
7    h  NaN

Wie Sie sehen, enthält der zusammengeführte DataFrame mit dem Verknüpfungstyp inner nur übereinstimmende Datensätze aus beiden DataFrames, während derjenige mit dem Verknüpfungstyp outer alle Elemente enthält, wobei fehlende Datensätze mit NaN gefüllt werden. Jetzt durch Verwendung von left join:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_left = df1.merge(df2, how="left", left_index=True, right_index=True)

print(df_left)

Ausgabe:

  C1   C2
1  a   AA
2  b   BB
4  d  NaN
5  e   EE
7  h  NaN

Der obige zusammengeführte DataFrame hat alle Elemente aus dem linken DataFrame, und nur die übereinstimmenden Datensätze aus dem rechten DataFrame. Das genaue Gegenteil ist die “rechte” Verknüpfung, wie unten gezeigt:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_right = df1.merge(df2, how="right", left_index=True, right_index=True)

print(df_right)

Ausgabe:

    C1  C2
1    a  AA
2    b  BB
3  NaN  CC
5    e  EE
6  NaN  FF

Verwenden Sie join(), um zwei Pandas DataFrames auf dem Index zu kombinieren

Die Methode join() kombiniert die beiden DataFrames basierend auf ihren Indizes, und standardmäßig ist der Join-Typ left. Sie verwendet immer den Index des rechten DataFrames, aber wir können den Schlüssel für den linken DataFrame angeben. Wir können die Verknüpfungstypen für die Funktion join() genauso angeben, wie wir sie für merge() angeben.

Das folgende Beispiel zeigt einen zusammengeführten DataFrame mit dem Verknüpfungstyp outer:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.join(df2, how="outer")
print(df_outer)

Ausgabe:

    C1   C2
1    a   AA
2    b   BB
3  NaN   CC
4    d  NaN
5    e   EE
6  NaN   FF
7    h  NaN
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Verwandter Artikel - Pandas DataFrame