Ich arbeite mit mehreren Tabellen, die viele-zu-viele Beziehungen haben. Was ist der effizienteste Weg, um diese Daten zu transformieren, um sicherzustellen, dass die Kategoriespalte eindeutig ist und dass alle entsprechenden Einheiten in einer einzigen Zeile zusammengefasst sind?Kombinieren von Werten aus mehreren Zeilen in einer einzigen Zeile
category unit
A01 97337
A01 97333
A01 97334
A01 97343
A01 26223
A01 26226
A01 22722
A01 93397
A01 97332
A01 97342
A01 97369
A01 97734
A01 97332
P76 97343
P76 26223
P76 27399
P76 27277
P76 27234
P76 27297
P76 27292
P76 22723
P76 93622
P76 27343
P76 27234
P98 97337
In diese:
category category_units
A01 97337, 97333, 97334, 97343, 26223, 26226, 22722, 93397, 97332, 97342, 97369, 97734, 97332
P76 97343, 26223, 93622, 99733, 27399, 27277, 27234, 27297, 27292
P98 97337
eine Zeile pro Kategorie (dient als ein Primärschlüssel), wobei jeder der entsprechenden Einheiten sind in einer einzigen Spalte konkateniert mit durch Komma getrennten Werte.
Ich würde diese Daten zurück zu einer anderen Faktentabelle beitreten und schließlich würde der Endbenutzer nach category_units filtern, wo es einen Wert enthält, so dass es alle Zeilen heraufziehen würde, die diesem Wert zugeordnet sind.
Cool, funktioniert super. Aufgrund der Art einiger meiner Joins (viele Zwischentabellen) hat mein Endergebnis einige Duplikate in einer Reihe. Beispiel: category = A01, units = 97337, 26223, 97337. Gibt es eine Möglichkeit, die Duplikate auf Zeilenebene sauber zu entfernen? Ich dachte an die Verwendung von .str.split(), aber dann wusste ich nicht, wie ich nur die eindeutigen Werte pro Zeile beibehalten konnte. – trench
Sie können 'set' oder' unique' verwenden wie 'df1 = df.groupby ('category') ['unit'] .apply (Lambda x: ',' .join (x.unique(). Astyp (str))) 'oder' df1 = df.groupby ('category') ['unit'] .apply (lambda x: ',' .join (setzen (x.astype (str)))) ' – jezrael
Das alles hat funktioniert perfekt. Ich musste tatsächlich mehrere Viele-zu-Viele-Tabellen anwenden und die Ergebnisse sind genau das, was ich wollte. Danke – trench