Pandas links äußere verbinden mehrere Dataframes auf mehrere Spalten

Ich bin neu bei der Verwendung von DataFrame und ich möchte wissen, wie man ein SQL-Äquivalent des linken äußeren Join auf mehrere Spalten auf einer Reihe von Tabellen ausführen

Beispiel:

df1: Year Week Colour Val1 2014 A Red 50 2014 B Red 60 2014 B Black 70 2014 C Red 10 2014 D Green 20 df2: Year Week Colour Val2 2014 A Black 30 2014 B Black 100 2014 C Green 50 2014 C Red 20 2014 D Red 40 df3: Year Week Colour Val3 2013 B Red 60 2013 C Black 80 2013 B Black 10 2013 D Green 20 2013 D Red 50__ 

Im Grunde möchte ich so etwas wie diesen SQL-Code machen (Beachten Sie, dass df3 nicht am Jahr beigetreten ist):

 SELECT df1.*, df2.Val2, df3.Val3 FROM df1 LEFT OUTER JOIN df2 ON df1.Year = df2.Year AND df1.Week = df2.Week AND df1.Colour = df2.Colour LEFT OUTER JOIN df3 ON df1.Week = df3.Week AND df1.Colour = df3.Colour 

Das Ergebnis sollte wie folgt aussehen:

 Year Week Colour Val1 Val2 Val3 2014 A Red 50 Null Null 2014 B Red 60 Null 60 2014 B Black 70 100 Null 2014 C Red 10 20 Null 2014 D Green 20 Null Null 

Ich habe versucht, Merge und Join, aber kann nicht herausfinden, wie man es auf mehrere Tische und wenn es mehrere Gelenke beteiligt sind. Könnte mir hier jemand weiterhelfen?

Vielen Dank

  • Beatbox: Wie füge ich ODER-Funktion zu WHERE-Klausel beim Ziehen von Daten aus SFDC hinzu?
  • Lesen und Schreiben der Zugangsdatenbank in Python
  • Verwenden von Microsoft Access SQL-Operatoren in Python ODBC
  • Python, Konvertierung CSV-Datei in SQL-Tabelle
  • Warum macht SQLAlchemy keine seriellen Spalten?
  • Wie kann man die Existenz einer Zeile in SQLite mit Python überprüfen?
  • SQLAlchemie Ordnung durch Hybrid-Eigenschaft, die Verweise Beziehung
  • SQL-Datumsvariablen in Python
  • One Solution collect form web for “Pandas links äußere verbinden mehrere Dataframes auf mehrere Spalten”

    Fügen Sie sie in zwei Schritten, df1 und df2 zuerst, und dann das Ergebnis von diesem zu df3 .

     In [33]: s1 = pd.merge(df1, df2, how='left', on=['Year', 'Week', 'Colour']) 

    Ich habe das Jahr von df3 fallen gelassen, da du es nicht für den letzten Beitritt brauchst.

     In [39]: df = pd.merge(s1, df3[['Week', 'Colour', 'Val3']], how='left', on=['Week', 'Colour']) In [40]: df Out[40]: Year Week Colour Val1 Val2 Val3 0 2014 A Red 50 NaN NaN 1 2014 B Red 60 NaN 60 2 2014 B Black 70 100 10 3 2014 C Red 10 20 NaN 4 2014 D Green 20 NaN 20 [5 rows x 6 columns] 
    Python ist die beste Programmiersprache der Welt.