Performant Cross Join (CROSS JOIN) mit Pandas
In diesem Beitrag untersuchen wir die effizientesten Methoden zur Durchführung eines kartesischen Produkts (CROSS). JOIN)-Vorgang in Pandas.
Basismethode: Temporärer Schlüssel Spalte
Der typische Ansatz besteht darin, beiden DataFrames eine temporäre Schlüsselspalte zuzuweisen, eine Viele-zu-Viele-Verknüpfung für diesen Schlüssel durchzuführen und dann die Schlüsselspalte zu löschen:
left = pd.DataFrame({'col1' : ['A', 'B', 'C'], 'col2' : [1, 2, 3]}) right = pd.DataFrame({'col1' : ['X', 'Y', 'Z'], 'col2' : [20, 30, 50]}) def cartesian_product_basic(left, right): return ( left.assign(key=1).merge(right.assign(key=1), on='key').drop('key', 1)) cartesian_product_basic(left, right)
NumPy-basierte Implementierung
Für eine verbesserte Leistung bei größeren Datensätzen nutzen wir die NumPy-Implementierung von Kartesisches Produkt:
import numpy as np def cartesian_product(*arrays): la = len(arrays) dtype = np.result_type(*arrays) arr = np.empty([len(a) for a in arrays] + [la], dtype=dtype) for i, a in enumerate(np.ix_(*arrays)): arr[...,i] = a return arr.reshape(-1, la)
Verallgemeinerung auf nicht eindeutige indizierte DataFrames
Wir können diesen Ansatz erweitern, um DataFrames mit nicht eindeutigen Indizes zu verarbeiten:
def cartesian_product_generalized(left, right): la, lb = len(left), len(right) idx = cartesian_product(np.ogrid[:la], np.ogrid[:lb]) return pd.DataFrame( np.column_stack([left.values[idx[:,0]], right.values[idx[:,1]]]))
Vereinfachte Umsetzung für Zwei DataFrames
Beim Umgang mit nur zwei DataFrames kann eine einfachere Technik unter Verwendung von np.broadcast_arrays eine vergleichbare Leistung erzielen:
def cartesian_product_simplified(left, right): la, lb = len(left), len(right) ia2, ib2 = np.broadcast_arrays(*np.ogrid[:la,:lb]) return pd.DataFrame( np.column_stack([left.values[ia2.ravel()], right.values[ib2.ravel()]]))
Leistungsvergleich
Das Benchmarking dieser Methoden zeigt, dass die NumPy-basierten Implementierungen die schnellste Leistung bieten, insbesondere bei größeren Datensätze:
[Bild der Leistungsvergleichstabelle]
Weiterführende Literatur
Um einen tieferen Einblick in die Zusammenführungsvorgänge von Pandas zu erhalten, erkunden Sie die folgenden Themen:
Das obige ist der detaillierte Inhalt vonWie führt man einen CROSS JOIN in Pandas effizient durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!