Python Pandas führen nur bestimmte Spalten zusammen

Lesezeit: 4 Minuten

Benutzeravatar von BubbleGuppies
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:

df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')

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

Benutzeravatar von Andy Hayden
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

Benutzeravatar von tonneofash
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:

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                left_on = 'key2', right_on = 'key1').drop(columns = ['key1'])

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


Benutzeravatar von Terrance DeJesus
Terrance DeJesus

Sie können verwenden .loc um die spezifischen Spalten mit allen Zeilen auszuwählen und dann zu ziehen. Ein Beispiel ist unten:

pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')

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.

Benutzeravatar von Marco167
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)

Benutzeravatar von Cornelius Roemer
Cornelius Römer

Leichte Erweiterung der akzeptierten Antwort für Spaltennamen mit mehreren Zeichen, die standardmäßig eine innere Verknüpfung verwenden:

df1 = df1.merge(df2[["Key_Column", "Target_Column1", "Target_Column2"]])

Dies setzt das voraus Key_Column ist die einzige Spalte, die beide Datenrahmen gemeinsam haben.

1436000cookie-checkPython Pandas führen nur bestimmte Spalten zusammen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy