Cartesian Product (Cross Join)** คือการรวมแถวทุกคู่ที่เป็นไปได้ระหว่างสอง DataFrame โดยไม่มีเงื่อนไขการจับคู่ (join condition) ใน Pandas ทำได้โดยตั้งค่า how="cross" ใน pd.merge() (รองรับ Pandas 1.2.0+)
ขั้นตอนการทำงาน
1. สร้าง DataFrame ทั้งสอง
import pandas as pd
dataFrame1 = pd.DataFrame({
"Car": ['BMW', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 120]
})
dataFrame2 = pd.DataFrame({
"Car": ['BMW', 'Tesla', 'Jaguar'],
"Reg_Price": [7000, 8000, 9000]
})
2. Cross Join (Cartesian Product)
mergedRes = pd.merge(dataFrame1, dataFrame2, how="cross")
print(mergedRes)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
dataFrame1 = pd.DataFrame({
"Car": ['BMW', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 120]
})
print("DataFrame1:\n", dataFrame1)
dataFrame2 = pd.DataFrame({
"Car": ['BMW', 'Tesla', 'Jaguar'],
"Reg_Price": [7000, 8000, 9000]
})
print("\nDataFrame2:\n", dataFrame2)
# Cartesian Product
mergedRes = pd.merge(dataFrame1, dataFrame2, how="cross")
print("\nMerged dataframe (cartesian product):\n", mergedRes)
ผลลัพธ์
Merged dataframe (cartesian product):
Car Units Car_y Reg_Price
0 BMW 100 BMW 7000
1 BMW 100 Tesla 8000
2 BMW 100 Jaguar 9000
3 Mustang 150 BMW 7000
4 Mustang 150 Tesla 8000
5 Mustang 150 Jaguar 9000
6 Bentley 110 BMW 7000
7 Bentley 110 Tesla 8000
8 Bentley 110 Jaguar 9000
9 Jaguar 120 BMW 7000
10 Jaguar 120 Tesla 8000
11 Jaguar 120 Jaguar 9000
คำอธิบาย
- DataFrame1 มี 4 แถว, DataFrame2 มี 3 แถว → ผลลัพธ์ 4 × 3 = 12 แถว
- คอลัมน์ที่ชื่อซ้ำ (
Car) จะถูก rename อัตโนมัติเป็นCar_xและCar_y(ในที่นี้แสดงเป็น Car และ Car_y) - ใช้กรณี: สร้างชุดข้อมูลทดสอบ, คำนวณความน่าจะเป็นร่วม, ทดสอบทุกชุดพารามิเตอร์
⚠️ ข้อควรระวัง
- ขนาดข้อมูลจะเพิ่มขึ้นแบบคูณ (M × N) → อาจกินหน่วยความจำมากถ้าข้อมูลใหญ่
- Pandas < 1.2.0 ใช้ workaround:
df1.assign(key=1).merge(df2.assign(key=1), on='key').drop('key', axis=1)