Performant Cross Join (CROSS JOIN) dengan Panda
Dalam siaran ini, kami meneroka kaedah yang paling berkesan untuk melaksanakan produk Cartesian (CROSS SERTAI) operasi dalam Panda.
Kaedah Dasar: Kunci Sementara Lajur
Pendekatan biasa melibatkan penugasan lajur kunci sementara kepada kedua-dua DataFrames, melakukan gabungan banyak-ke-banyak pada kunci itu, dan kemudian melepaskan lajur kunci:
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)
Pelaksanaan Berasaskan NumPy
Untuk prestasi yang lebih baik pada set data yang lebih besar, kami memanfaatkan pelaksanaan NumPy bagi produk Cartesian:
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)
Generalisasi kepada Bingkai Data Berindeks Bukan Unik
Kami boleh melanjutkan pendekatan ini untuk mengendalikan DataFrames dengan indeks bukan unik :
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]]]))
Pelaksanaan Dipermudahkan untuk Dua DataFrames
Apabila berurusan dengan hanya dua DataFrames, teknik yang lebih mudah menggunakan np.broadcast_arrays boleh mencapai prestasi yang setanding:
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()]]))
Perbandingan Prestasi
Menanda aras kaedah ini mendedahkan bahawa pelaksanaan berasaskan NumPy menyediakan prestasi terpantas, terutamanya untuk set data yang lebih besar:
[Imej carta perbandingan prestasi]
Bacaan Lanjut
Untuk menyelam lebih mendalam mengenai operasi penggabungan Panda, teroka topik berikut:
Atas ialah kandungan terperinci Bagaimana untuk Cekap Melakukan CROSS JOIN dalam Panda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!