Kombinatorische Explosion beim Zusammenführen von Datenrahmen in Pandas

8

Ich versuche eine Reihe von Datenrahmen in Pandas zusammenzuführen. Ich habe eine Liste von dfs, dfs und eine Liste ihrer entsprechenden Labels labels und ich möchte alle dfs in 1 df so zusammenführen, dass die gemeinsamen Labels von einem df das Suffix von seiner Bezeichnung in% co_de bekommen % Liste. d.h.:

%Vor%

Wenn ich das versuche, bekomme ich den Fehler:

%Vor%

Ich versuche eine Reihe von Zusammenführungen zu machen, die bei jeder Zusammenführung höchstens um die Anzahl der Spalten N wachsen, wobei N die Anzahl der Spalten im "nächsten" df in der Liste ist. Der endgültige DF sollte so viele Spalten haben wie alle df-Spalten zusammen, so dass er additiv wächst und nicht kombinatorisch ist.

Das von mir gesuchte Verhalten ist: Verknüpfen Sie dfs mit den angegebenen Spaltennamen (z. B. angegeben durch labels ) oder dass die dfs indiziert werden. Vereinigen Sie die nicht geläufigen Spaltennamen (wie im äußeren Join). Wenn eine Spalte in mehreren dfs angezeigt wird, überschreiben Sie sie optional. Wenn Sie sich die Docs genauer ansehen, klingt es vielleicht so, als wäre on= der beste Weg, dies zu tun. Wenn ich update versuche, löst es eine Ausnahme aus, die signalisiert, dass es nicht implementiert ist.

BEARBEITEN :

Hier ist mein Versuch einer Implementierung, die keine Suffixe behandelt, sondern die Art von Merge, nach der ich suche, darstellt:

%Vor%

Dies setzt voraus, dass das Zusammenführen auf den Indizes jedes dfs geschieht. Neue Spalten werden in einem Outer-Join-Stil hinzugefügt, aber Spalten, die häufig vorkommen (und nicht Teil des Indexes), werden in der Verknüpfung über das join='outer' -Schlüsselwort verwendet.

Beispiel:

%Vor%

Der Drehpunkt dafür wäre einer, bei dem Sie willkürlich ein Suffix für jedes df markieren, basierend auf einer Reihe von Bezeichnungen für Spalten, die üblich sind, aber das ist weniger wichtig. Ist die oben genannte Zusammenführungsoperation etwas, das in Pandas eleganter ausgeführt werden kann oder das bereits als eingebaut existiert?

    
user248237dfsf 07.01.2013, 15:42
quelle

2 Antworten

5

Die Ausgabe Ihrer Methode:

%Vor%

Eine Lösung mit integrierten Pandas df.combine_first :

%Vor%

Um den Spalten jedes Rahmens ein Suffix hinzuzufügen, würde ich vorschlagen, die Spalten vor dem Aufruf von combine_first umzubenennen.

Auf der anderen Seite möchten Sie vielleicht eine Operation wie pd.concat([df1, df2, df3], keys=['d1', 'd2', 'd3'], axis=1) betrachten, die einen Datenrahmen mit MultiIndex-Spalten erzeugt. In diesem Fall möchten Sie vielleicht in Betracht ziehen, Geschlecht zum Teil des Index zu machen oder mit dessen Duplizierung zu leben.

    
Garrett 11.01.2013, 17:40
quelle
1

aus dem Quellcode:

%Vor%

Und in gleiche Datei

%Vor%

Die Zeile max_groups *= long(x) zeigt an, dass sie nicht additiv, also kritisch ist.

    
Thorsten Kranz 10.01.2013 21:19
quelle

Tags und Links