Suche…


Syntax

  • DataFrame. merge ( rechts, wie = 'inner', ein = keine, left_on = keine, right_on = keine, left_index = false, right_index = false, sort = false, Suffixe = ('_ x', '_y') Indikator = False )

  • Fügen Sie DataFrame-Objekte zusammen, indem Sie einen Join-Vorgang im Datenbankstil nach Spalten oder Indizes ausführen.

  • Wenn Sie Spalten für Spalten verbinden, werden die DataFrame-Indizes ignoriert. Andernfalls wird der Index weitergegeben, wenn Indizes für Indizes oder Indizes für eine oder mehrere Spalten zusammengefügt werden.

Parameter

Parameter Erläuterung
Recht DataFrame
Wie {'left', 'right', 'outer', 'inner'}, Standardeinstellung 'inner'
links auf Beschriftung oder Liste oder Array-like. Feldnamen, an denen der linke DataFrame teilnehmen soll. Kann ein Vektor oder eine Liste von Vektoren der Länge des DataFrame sein, um einen bestimmten Vektor als Verknüpfungsschlüssel anstelle von Spalten zu verwenden
direkt am Beschriftung oder Liste oder Array-like. Feldnamen, an denen im rechten DataFrame oder Vektor / Liste der Vektoren pro left_on docs eine Verbindung hergestellt werden kann
left_index boolean, Standardwert False. Verwenden Sie den Index aus dem linken DataFrame als Verbindungsschlüssel. Wenn es sich um einen MultiIndex handelt, muss die Anzahl der Schlüssel im anderen DataFrame (entweder der Index oder eine Anzahl von Spalten) mit der Anzahl der Ebenen übereinstimmen
right_index boolean, Standardwert False. Verwenden Sie den Index aus dem rechten DataFrame als Verbindungsschlüssel. Gleiche Vorbehalte wie left_index
Sortieren boolean, Standardwert Fals. Sortieren Sie die Join-Schlüssel im Ergebnis-DataFrame lexikographisch
Suffixe Sequenz mit 2 Längen (Tupel, Liste, ...). Suffix für überlappende Spaltennamen auf der linken bzw. rechten Seite
Kopieren boolean, Standardeinstellung True. Bei Falsch kopieren Sie Daten nicht unnötig
Indikator boolean oder string, default False. Bei True wird der Ausgabedatenleiste "_merge" mit einer Spalte mit Informationen zur Quelle jeder Zeile hinzugefügt. Bei einer Zeichenfolge wird eine Spalte mit Informationen zur Quelle jeder Zeile zum Ausgabe-DataFrame hinzugefügt, und die Spalte wird als Wert der Zeichenfolge bezeichnet. Die Informationsspalte ist vom Typ "Kategorisch" und nimmt den Wert "left_only" für Beobachtungen an, deren Zusammenführungsschlüssel nur in "linkem" DataFrame angezeigt wird, "right_only" für Beobachtungen, deren Zusammenführungsschlüssel nur in "rechtem" DataFrame erscheint Der Merge-Schlüssel der Beobachtung wird in beiden gefunden.

Verschmelzen

Zum Beispiel werden zwei Tabellen angegeben:

T1

id    x        y
8    42        1.9
9    30        1.9

T2

id    signal
8    55
8    56    
8    59
9    57
9    58    
9    60

Ziel ist es, die neue Tabelle T3 zu erhalten:

id    x        y        s1        s2        s3
8    42        1.9        55        56        58
9    30        1.9        57        58        60

Die Spalten s1 , s2 und s3 erstellen, die jeweils einer Zeile entsprechen (die Anzahl der Zeilen pro id ist immer fest und entspricht 3).

Durch Anwenden von join (für das optional ein Argument erforderlich ist, das eine Spalte oder mehrere Spaltennamen sein kann, das angibt, dass der übergebene DataFrame für diese Spalte in dem DataFrame ausgerichtet werden soll). Die Lösung kann also wie folgt aussehen:

df = df1.merge (df2.groupby ('id') ['signal']. apply (lambda x: x.reset_index (drop = true)). unstack (). reset_index ())

df
Out[63]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60

Wenn ich sie trenne:

df2t = df2.groupby('id')['signal'].apply(lambda x: x.reset_index(drop=True)).unstack().reset_index()

df2t
Out[59]: 
   id   0   1   2
0   8  55  56  59
1   9  57  58  60

df = df1.merge(df2t)

df
Out[61]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60

Zusammenführen von zwei DataFrames

In [1]: df1 = pd.DataFrame({'x': [1, 2, 3], 'y': ['a', 'b', 'c']})

In [2]: df2 = pd.DataFrame({'y': ['b', 'c', 'd'], 'z': [4, 5, 6]})

In [3]: df1
Out[3]: 
   x  y
0  1  a
1  2  b
2  3  c   

In [4]: df2
Out[4]: 
   y  z
0  b  4
1  c  5
2  d  6

Inner Join:

Verwendet die Schnittmenge von Schlüsseln aus zwei DataFrames.

In [5]: df1.merge(df2) # by default, it does an inner join on the common column(s)
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5

Alternativ können Sie den Schnittpunkt von Schlüsseln aus zwei Dataframes angeben.

In [5]: merged_inner = pd.merge(left=df1, right=df2, left_on='y', right_on='y')
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5

Äußere Verbindung:

Verwendet die Vereinigung der Schlüssel aus zwei DataFrames.

In [6]: df1.merge(df2, how='outer')
Out[6]: 
     x  y    z
0  1.0  a  NaN
1  2.0  b  4.0
2  3.0  c  5.0
3  NaN  d  6.0

Verwendet nur Schlüssel vom linken DataFrame.

In [7]: df1.merge(df2, how='left')
Out[7]: 
   x  y    z
0  1  a  NaN
1  2  b  4.0
2  3  c  5.0

Rechts beitreten

Verwendet nur Schlüssel vom rechten DataFrame.

In [8]: df1.merge(df2, how='right')
Out[8]: 
     x  y  z
0  2.0  b  4
1  3.0  c  5
2  NaN  d  6

Zusammenführen / Verketten / Verbinden mehrerer Datenrahmen (horizontal und vertikal)

Beispieldatenrahmen generieren:

In [57]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})

In [58]: df1 = pd.DataFrame({'col1':[11,12,13], 'col2': [21,22,23]})

In [59]: df2 = pd.DataFrame({'col1':[111,112,113], 'col2': [121,122,123]})

In [60]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})

In [61]: df1
Out[61]:
   col1  col2
0    11    21
1    12    22
2    13    23

In [62]: df2
Out[62]:
   col1  col2
0   111   121
1   112   122
2   113   123

In [63]: df3
Out[63]:
   col1  col2
0   211   221
1   212   222
2   213   223

Datenrahmen [df1, df2, df3] vertikal zusammenfügen / zusammenfügen / verketten - Zeilen hinzufügen

In [64]: pd.concat([df1,df2,df3], ignore_index=True)
Out[64]:
   col1  col2
0    11    21
1    12    22
2    13    23
3   111   121
4   112   122
5   113   123
6   211   221
7   212   222
8   213   223

Datenrahmen horizontal zusammenführen / zusammenfügen / verketten (Ausrichtung nach Index):

In [65]: pd.concat([df1,df2,df3], axis=1)
Out[65]:
   col1  col2  col1  col2  col1  col2
0    11    21   111   121   211   221
1    12    22   112   122   212   222
2    13    23   113   123   213   223

Merge, Join und Concat

Das Zusammenführen von Schlüsselnamen ist identisch

pd.merge(df1, df2, on='key')

Das Zusammenführen von Schlüsselnamen ist unterschiedlich

pd.merge(df1, df2, left_on='l_key', right_on='r_key')

Verschiedene Arten der Verbindung

pd.merge(df1, df2, on='key', how='left')

Zusammenführen auf mehreren Schlüsseln

pd.merge(df1, df2, on=['key1', 'key2'])

Behandlung überlappender Säulen

pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))

Zeilenindex verwenden, anstatt Schlüssel zusammenzuführen

pd.merge(df1, df2, right_index=True, left_index=True)

Vermeiden Sie die Verwendung der .join Syntax, da sie eine Ausnahme für überlappende Spalten gibt

Zusammenführen des linken Datenrahmenindex und der rechten Datenrahmenspalte

pd.merge(df1, df2, right_index=True, left_on='l_key')

Datenrahmen zusammenfassen

Vertikal geklebt

pd.concat([df1, df2, df3], axis=0)

Horizontal geklebt

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

Was ist der Unterschied zwischen Join und Merge?

Betrachten Sie die Datenrahmen left und right

left = pd.DataFrame([['a', 1], ['b', 2]], list('XY'), list('AB'))
left

   A  B
X  a  1
Y  b  2

right = pd.DataFrame([['a', 3], ['b', 4]], list('XY'), list('AC'))
right

   A  C
X  a  3
Y  b  4

join
Stellen Sie sich den join so vor, als wollten Sie ihn basierend auf den jeweiligen Indizes zu Datenrahmen kombinieren. Wenn überlappende Spalten vorhanden sind, möchten Sie, dass join dem überlappenden Spaltennamen aus dem linken Datenrahmen ein Suffix hinzufügt. Unsere beiden Datenrahmen haben einen überlappenden Spaltennamen A

left.join(right, lsuffix='_')

  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4

Beachten Sie, dass der Index beibehalten wird und wir 4 Spalten haben. 2 Spalten von left und 2 von right .

Wenn die Indizes nicht übereinstimmen

left.join(right.reset_index(), lsuffix='_', how='outer')

    A_    B index    A    C
0  NaN  NaN     X    a  3.0
1  NaN  NaN     Y    b  4.0
X    a  1.0   NaN  NaN  NaN
Y    b  2.0   NaN  NaN  NaN

Ich habe eine äußere Verbindung verwendet, um den Punkt besser zu veranschaulichen. Wenn die Indizes nicht übereinstimmen, wird das Ergebnis die Vereinigung der Indizes sein.

Wir können join anweisen, eine bestimmte Spalte im linken Datenrahmen als Join-Schlüssel zu verwenden, der Index wird jedoch weiterhin von rechts verwendet.

left.reset_index().join(right, on='index', lsuffix='_')

  index A_  B  A  C
0     X  a  1  a  3
1     Y  b  2  b  4

merge
Stellen Sie sich die merge als Ausrichtung auf Spalten vor. Bei der merge wird standardmäßig nach überlappenden Spalten gesucht, in denen die Zusammenführung erfolgen soll. merge die merge besser steuern, indem Sie dem Benutzer die Möglichkeit geben, eine Untermenge der überlappenden Spalten anzugeben, die mit dem Parameter on , oder die Angabe, welche Spalten links und welche Spalten rechts zusammengeführt werden sollen.

merge wird ein kombinierter Datenrahmen zurückgegeben, in dem der Index gelöscht wird.

In diesem einfachen Beispiel wird die überlappende Spalte als 'A' und basierend darauf kombiniert.

left.merge(right)

   A  B  C
0  a  1  3
1  b  2  4

Beachten Sie, dass der Index [0, 1] und nicht länger ['X', 'Y']

Sie können explizit angeben, dass Sie den Index mit dem left_index oder right_index zusammenführen

left.merge(right, left_index=True, right_index=True, suffixes=['_', ''])

  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4

Und das sieht genauso aus wie das join Beispiel oben.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow