Python Pandas führen nur bestimmte Spalten zusammen
Lesezeit: 4 Minuten
BubbleGuppies
Ist es möglich, nur einige Spalten zusammenzuführen? Ich habe einen DataFrame df1 mit den Spalten x, y, z und df2 mit den Spalten x, a, b, c, d, e, f usw.
Ich möchte die beiden DataFrames auf x zusammenführen, aber ich möchte nur die Spalten df2.a, df2.b zusammenführen – nicht den gesamten DataFrame.
Das Ergebnis wäre ein DataFrame mit x, y, z, a, b.
Ich könnte die unerwünschten Spalten zusammenführen und dann löschen, aber es scheint, als gäbe es eine bessere Methode.
Andy: Heilige Kuh, das war einfach … Ich brauche eine Pause, ich mache das offensichtlich zu kompliziert. Danke für die Klarheit!
– BubbleGuppies
31. Juli 2013 um 19:07 Uhr
Sie möchten ZWEI Klammern verwenden, wenn Sie also eine VLOOKUP-Aktion durchführen:
Dadurch erhalten Sie alles im ursprünglichen df + fügen Sie die entsprechende Spalte in df2 hinzu, der Sie beitreten möchten.
dürfen Target_Column eine Liste von Spalten sein?
– Gathide
12. Oktober 2020 um 10:20 Uhr
Ich glaube, dies sollte die akzeptierte Antwort sein. @BubbleGuppies
– rmmariano
23. April 2021 um 19:25 Uhr
@Gathide Ja, es kann mehrere Zielspalten wie geben df2[['key','target1','target2']]
– Cornelius Römer
7. Juli 2021 um 15:58 Uhr
Andy Hayden
Sie könnten den Sub-DataFrame (nur mit diesen Spalten) zusammenführen:
df2[list('xab')] # df2 but only with columns x, a, and b
df1.merge(df2[list('xab')])
Hmmm, ich frage mich, ob es eine native Möglichkeit geben sollte, dies zu tun, wie z. B. Teilmenge in Dropna … wird GitHub-Problem zusammenstellen
– Andy Hayden
31. Juli 2013 um 19:12 Uhr
Hmmm … Ich habe versucht, dies zu verwenden, um die Spalte ‘Unique_External_Users’ von df2 nach df1 zusammenzuführen, aber eine Fehlermeldung erhalten … “None of [Index([‘U’, ‘n’, ‘i’, ‘q’, ‘u’, ‘e’, ‘‘, ‘E’, ‘x’, ‘t’, ‘e’, ‘r’, ‘n’, ‘a’,\n ‘l’, ‘‘, ‘U’, ‘s’, ‘e’, ‘r’, ‘s’],\n dtype=’object’)]befinden sich in der [columns]” .
– CoolDocMan
28. Februar 2020 um 20:48 Uhr
Hier ist der Code. … df1.merge(df2(‘Unique_External_Users’)])
– CoolDocMan
28. Februar 2020 um 20:53 Uhr
@CoolDocMan Ich glaube, Sie haben etwas aus der vorgeschlagenen Antwort verpasst: list('xab') nimmt jedes Element (Buchstaben) der Zeichenfolge ‘xab’ und wandelt es so in ein Listenelement um list('xab') kehrt zurück ['x', 'a', 'b']. Das funktioniert, wenn jede Spalte einen einzelnen Buchstaben als Namen hat. In Ihrem Fall müssen Sie meiner Meinung nach df1.merge (df2[‘Unique_External_Users’], *andere_argumente). …Höchstwahrscheinlich hast du es inzwischen schon gelöst und überlässt es nur Neulingen wie mir
– SOf_PUAR
3. Juli 2020 um 7:11 Uhr
tonnefash
Wenn Sie Spalte(n) aus dem Zieldatenrahmen löschen möchten, die Spalte(n) jedoch für den Join erforderlich sind, können Sie Folgendes tun:
Das .drop(columns="key1") part verhindert, dass ‘key1’ im resultierenden Datenrahmen behalten wird, obwohl es überhaupt erforderlich ist, beizutreten.
Ich erhalte die folgende Fehlermeldung, wenn ich dies versuche: KeyError: "['key1'] not found in axis"
– Tanja Branagan
10. November 2019 um 19:25 Uhr
versuche es mit .drop(columns= [‘key1’])
– Psangam
3. Dezember 2019 um 6:47 Uhr
Oder .drop(‘key1’, Achse = 1)
– tonnefash
3. Dezember 2019 um 20:51 Uhr
oder kürzer: .drop('key1', 1)
– maciejwww
15. Oktober 2020 um 14:21 Uhr
Sehr guter Punkt. Dies ist anders als in SQL, wo Sie können SELECT df1..., df1.,, df2.a, df2.b FROM df1 LEFT JOIN df2 ON df1.key2=df2.key1 (wobei auch keine Auswahl erforderlich ist df1.key2 oder df2.key1) Auch eine gute Idee, das ursprüngliche df1 durch das neue df1 zu ersetzen, damit dadurch einfach neue Spalten basierend auf dem Zusammenführen hinzugefügt werden.
– pas-kalk
26. Oktober um 9:42 Uhr
Terrance DeJesus
Sie können verwenden .loc um die spezifischen Spalten mit allen Zeilen auszuwählen und dann zu ziehen. Ein Beispiel ist unten:
In diesem Beispiel führen Sie dataframe1 und dataframe2 zusammen. Sie haben sich für einen Outer Left Join auf ‘key’ entschieden. Für dataframe2 haben Sie jedoch angegeben .iloc Dadurch können Sie die gewünschten Zeilen und Spalten in einem numerischen Format angeben. Verwenden :Ihre Auswahl aller Zeilen, aber [0:5] wählt die ersten 5 Spalten aus. Du könntest benutzen .loc nach Namen angeben, aber wenn Sie es mit langen Spaltennamen zu tun haben, dann .iloc vielleicht besser.
Marco167
Dies dient dazu, ausgewählte Spalten aus zwei Tabellen zusammenzuführen.
Wenn table_1 enthält t1_a,t1_b,t1_c..,id,..t1_z Spalten und table_2 enthält t2_a, t2_b, t2_c..., id,..t2_z Spalten, und in der finalen Tabelle werden dann nur noch t1_a, id, t2_a benötigt
mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
# save resulting output file
mergedCSV.to_csv('output.csv',index = False)
Cornelius Römer
Leichte Erweiterung der akzeptierten Antwort für Spaltennamen mit mehreren Zeichen, die standardmäßig eine innere Verknüpfung verwenden:
Andy: Heilige Kuh, das war einfach … Ich brauche eine Pause, ich mache das offensichtlich zu kompliziert. Danke für die Klarheit!
– BubbleGuppies
31. Juli 2013 um 19:07 Uhr