Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Pandas – การหาแถวที่ซ้ำกันระหว่างสอง DataFrame ด้วย concat()

บทความนี้สาธิตวิธีหาแถวที่เหมือนกัน (Common Rows) ระหว่างสอง DataFrame โดยใช้ฟังก์ชัน concat() ร่วมกับ groupby()

หลักการทำงาน

  1. รวมสอง DataFrame ด้วย pd.concat()
  2. รีเซ็ตดัชนีด้วย reset_index()
  3. จัดกลุ่มตามทุกคอลัมน์ด้วย groupby()
  4. หากกลุ่มใดมีจำนวนแถวมากกว่า 1 แสดงว่าเป็นแถวที่ซ้ำ (มีในทั้งสอง DataFrame)

โค้ดตัวอย่างสมบูรณ์

import pandas as pd

# DataFrame แรก
dataFrame1 = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
    "Reg_Price": [1000, 1500, 1100, 800, 1100, 900]
})

# DataFrame ที่สอง
dataFrame2 = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
    "Reg_Price": [1200, 1500, 1000, 800, 1100, 1000]
})

print("DataFrame1:")
print(dataFrame1)
print("\nDataFrame2:")
print(dataFrame2)

# 1. รวมทั้งสอง DataFrame
dfRes = pd.concat([dataFrame1, dataFrame2])

# 2. รีเซ็ตดัชนี
dfRes = dfRes.reset_index(drop=True)

# 3. จัดกลุ่มตามทุกคอลัมน์
dfGroup = dfRes.groupby(list(dfRes.columns))

# 4. หากกลุ่มไหนมีขนาด > 1 = แถวที่ซ้ำ
res = [k[0] for k in dfGroup.groups.values() if len(k) > 1]

# 5. แสดงผลเฉพาะแถวที่ซ้ำ
print("\nแถวที่ซ้ำกัน (Common Rows):")
print(dfRes.reindex(res))

ผลลัพธ์

แถวที่ซ้ำกัน (Common Rows):
     Car  Reg_Price
3  Tesla        800
1  Lexus       1500
4  Bentley     1100

ข้อสังเกต

  • วิธีนี้ตรวจสอบการซ้ำของ "แถวทั้งหมด" (ทุกคอลัมน์ต้องตรงกัน)
  • เหมาะสำหรับข้อมูลขนาดเล็กถึงปานกลาง
  • สำหรับข้อมูลขนาดใหญ่ ควรพิจารณาใช้ merge() แบบ inner join แทน จะมีประสิทธิภาพดีกว่า

วิธีทางเลือก (แนะนำสำหรับข้อมูลใหญ่)

# ใช้ merge แบบ inner join - เร็วกว่าและอ่านง่ายกว่า
common_rows = pd.merge(dataFrame1, dataFrame2, how='inner')
print(common_rows)