Produk Cartesian Berprestasi (CROSS JOIN) dengan Panda
Dalam Panda, pengiraan produk cartesian (sambung silang) dua DataFrames boleh menjadi operasi penting. Walaupun helah JOIN banyak-ke-banyak berfungsi dengan munasabah untuk DataFrames yang lebih kecil, prestasi menurun dengan data yang lebih besar.
Pelaksanaan Pantas Menggunakan NumPy
Pelaksanaan yang lebih pantas menggunakan NumPy untuk 1D produk cartesian pengiraan:
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)
Penyelesaian Umum untuk DataFrames Berbeza
Helah di atas berfungsi untuk DataFrames dengan djenis skalar bukan campuran. Untuk djenis bercampur, gunakan atas risiko anda sendiri.
Mengerti kepada Bingkai Data Berindeks 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]]]))
Berbilang DataFrames:
Berbilang DataFrames boleh digabungkan menggunakan:
def cartesian_product_multi(*dfs): idx = cartesian_product(*[np.ogrid[:len(df)] for df in dfs]) return pd.DataFrame( np.column_stack([df.values[idx[:,i]] for i,df in enumerate(dfs)]))
Penyelesaian Ringkas untuk Dua DataFrames
Apabila berurusan dengan hanya dua DataFrames, pendekatan yang lebih mudah boleh digunakan:
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 penyelesaian menunjukkan bahawa cartesian_product_generalized berasaskan NumPy adalah yang terpantas, diikuti oleh cartesian_product_simplified untuk dua DataFrames.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Produk Cartesian (Cross Join) Pandas DataFrames dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!