Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Cekap Melakukan CROSS JOIN dalam Panda?
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!