Heim >Backend-Entwicklung >Python-Tutorial >Wie führt man einen CROSS JOIN in Pandas effizient durch?
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!