บทนำ
เมธอด intersection() ของ Pandas Index ใช้หาคอลัมน์ที่ซ้ำกันระหว่างสอง DataFrame ทำงานเหมือน & operator แต่เป็นเมธอดที่อ่านง่ายและชัดเจนกว่า
ตัวอย่างโค้ด
import pandas as pd
# DataFrame 1
df1 = pd.DataFrame({
"Car": ['Bentley', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Cubic_Capacity": [2000, 1800, 1500, 2500, 2200, 3000],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000],
})
# DataFrame 2
df2 = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Units_Sold": [100, 110, 150, 80, 200, 90]
})
print("DataFrame 1:")
print(df1)
print("\nDataFrame 2:")
print(df2)
# หาคอลัมน์ร่วมด้วย intersection()
common = df1.columns.intersection(df2.columns)
print(f"\nคอลัมน์ร่วม: {common.tolist()}")
ผลลัพธ์
DataFrame 1:
Car Cubic_Capacity Reg_Price
0 Bentley 2000 7000
1 Lexus 1800 1500
2 Tesla 1500 5000
3 Mustang 2500 8000
4 Mercedes 2200 9000
5 Jaguar 3000 6000
DataFrame 2:
Car Units_Sold
0 BMW 100
1 Lexus 110
2 Tesla 150
3 Mustang 80
4 Mercedes 200
5 Jaguar 90
คอลัมน์ร่วม: ['Car']
เปรียบเทียบ: intersection() vs & operator
| ด้านเปรียบเทียบ | intersection() | & operator |
|---|---|---|
| ความอ่านง่าย | สูง (explicit) | ปานกลาง (implicit) |
| ความยืดหยุ่น | รับ iterable อื่นได้ | ต้องเป็น Index/Set เท่านั้น |
| พารามิเตอร์เพิ่มเติม | มี sort parameter | ไม่มี |
| ประสิทธิภาพ | เท่ากัน | เท่ากัน |
พารามิเตอร์ sort
# เรียงลำดับผลลัพธ์
sorted_common = df1.columns.intersection(df2.columns, sort=True)
print(sorted_common)
# Index(['Car'], dtype='object')
# ไม่เรียง (ค่าเริ่มต้น False ในบางเวอร์ชัน)
unsorted = df1.columns.intersection(df2.columns, sort=False)
การดำเนินการเซตอื่นๆ ของ Index
# Union (รวม)
all_cols = df1.columns.union(df2.columns)
# Difference (df1 - df2)
only_df1 = df1.columns.difference(df2.columns)
# Symmetric Difference
sym_diff = df1.columns.symmetric_difference(df2.columns)
กรณีใช้งานจริง
- ตรวจสอบคอลัมน์ร่วมก่อน
merge()หรือjoin() - Validate schema ระหว่าง pipeline stages
- เลือกคอลัมน์ที่จะเก็บร่วมกันในการ concat
สรุป
df1.columns.intersection(df2.columns) เป็นวิธีที่ชัดเจนและเป็นทางการ (explicit) สำหรับหา intersection ของคอลัมน์ รองรับพารามิเตอร์ sort และทำงานกับ iterable ทั่วไป ไม่จำเป็นต้องเป็น Index