Python Pandas - Zusammenführen / Beitreten

Pandas verfügt über leistungsstarke In-Memory-Join-Vorgänge mit vollem Funktionsumfang, die relationalen Datenbanken wie SQL idiomatisch sehr ähnlich sind.

Pandas bietet eine einzige Funktion: merge, als Einstiegspunkt für alle Standard-Datenbankverbindungsvorgänge zwischen DataFrame-Objekten -

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)

Hier haben wir die folgenden Parameter verwendet -

  • left - Ein DataFrame-Objekt.

  • right - Ein weiteres DataFrame-Objekt.

  • on- Spalten (Namen), an denen Sie teilnehmen möchten. Muss sowohl im linken als auch im rechten DataFrame-Objekt gefunden werden.

  • left_on- Spalten aus dem linken DataFrame, die als Schlüssel verwendet werden sollen. Kann entweder Spaltennamen oder Arrays sein, deren Länge der Länge des DataFrame entspricht.

  • right_on- Spalten aus dem rechten DataFrame, die als Schlüssel verwendet werden sollen. Kann entweder Spaltennamen oder Arrays sein, deren Länge der Länge des DataFrame entspricht.

  • left_index - Wenn True,Verwenden Sie den Index (Zeilenbeschriftungen) aus dem linken DataFrame als Join-Schlüssel. Bei einem DataFrame mit einem MultiIndex (hierarchisch) muss die Anzahl der Ebenen mit der Anzahl der Join-Schlüssel aus dem rechten DataFrame übereinstimmen.

  • right_index - Gleiche Verwendung wie left_index für den richtigen DataFrame.

  • how- Eine von "links", "rechts", "außen", "innen". Der Standardwert ist inner. Jede Methode wurde unten beschrieben.

  • sort- Sortieren Sie das Ergebnis DataFrame nach den Verknüpfungsschlüsseln in lexikografischer Reihenfolge. Der Standardwert ist True. Wenn Sie den Wert auf False setzen, wird die Leistung in vielen Fällen erheblich verbessert.

Lassen Sie uns nun zwei verschiedene DataFrames erstellen und die Zusammenführungsvorgänge ausführen.

# import the pandas library
import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
   {'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right

Es ist output ist wie folgt -

Name  id   subject_id
0   Alex   1         sub1
1    Amy   2         sub2
2  Allen   3         sub4
3  Alice   4         sub6
4  Ayoung  5         sub5

    Name  id   subject_id
0  Billy   1         sub2
1  Brian   2         sub4
2  Bran    3         sub3
3  Bryce   4         sub6
4  Betty   5         sub5

Führen Sie zwei DataFrames auf einem Schlüssel zusammen

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')

Es ist output ist wie folgt -

Name_x   id  subject_id_x   Name_y   subject_id_y
0  Alex      1          sub1    Billy           sub2
1  Amy       2          sub2    Brian           sub4
2  Allen     3          sub4     Bran           sub3
3  Alice     4          sub6    Bryce           sub6
4  Ayoung    5          sub5    Betty           sub5

Führen Sie zwei DataFrames auf mehreren Schlüsseln zusammen

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])

Es ist output ist wie folgt -

Name_x   id   subject_id   Name_y
0    Alice    4         sub6    Bryce
1   Ayoung    5         sub5    Betty

Zusammenführen mit dem Argument 'wie'

Das howDas zusammenzuführende Argument gibt an, wie bestimmt wird, welche Schlüssel in die resultierende Tabelle aufgenommen werden sollen. Wenn eine Tastenkombination weder in der linken noch in der rechten Tabelle angezeigt wird, sind die Werte in der verknüpften Tabelle NA.

Hier ist eine Zusammenfassung der how Optionen und ihre SQL-äquivalenten Namen -

Zusammenführungsmethode SQL-Äquivalent Beschreibung
links LINKE ÄUSSERE VERBINDUNG Verwenden Sie die Tasten des linken Objekts
Recht RIGHT OUTER JOIN Verwenden Sie Schlüssel vom rechten Objekt
äußere VOLLSTÄNDIGER OUTER JOIN Verwenden Sie die Vereinigung von Schlüsseln
innere INNER JOIN Verwenden Sie den Schnittpunkt der Schlüssel

Links beitreten

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')

Es ist output ist wie folgt -

Name_x   id_x   subject_id   Name_y   id_y
0     Alex      1         sub1      NaN    NaN
1      Amy      2         sub2    Billy    1.0
2    Allen      3         sub4    Brian    2.0
3    Alice      4         sub6    Bryce    4.0
4   Ayoung      5         sub5    Betty    5.0

Right Join

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')

Es ist output ist wie folgt -

Name_x  id_x   subject_id   Name_y   id_y
0      Amy   2.0         sub2    Billy      1
1    Allen   3.0         sub4    Brian      2
2    Alice   4.0         sub6    Bryce      4
3   Ayoung   5.0         sub5    Betty      5
4      NaN   NaN         sub3     Bran      3

Äußere Verbindung

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')

Es ist output ist wie folgt -

Name_x  id_x   subject_id   Name_y   id_y
0     Alex   1.0         sub1      NaN    NaN
1      Amy   2.0         sub2    Billy    1.0
2    Allen   3.0         sub4    Brian    2.0
3    Alice   4.0         sub6    Bryce    4.0
4   Ayoung   5.0         sub5    Betty    5.0
5      NaN   NaN         sub3     Bran    3.0

Inner Join

Die Verknüpfung wird für den Index durchgeführt. Die Verknüpfungsoperation berücksichtigt das Objekt, für das sie aufgerufen wird. Damit,a.join(b) ist ungleich zu b.join(a).

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')

Es ist output ist wie folgt -

Name_x   id_x   subject_id   Name_y   id_y
0      Amy      2         sub2    Billy      1
1    Allen      3         sub4    Brian      2
2    Alice      4         sub6    Bryce      4
3   Ayoung      5         sub5    Betty      5