วิธีเปรียบเทียบ dataframes สองตัวใน pandas
บ่อยครั้งที่คุณอาจสนใจที่จะเปรียบเทียบค่าระหว่าง DataFrames แพนด้าสองตัวเพื่อระบุความเหมือนและความแตกต่าง
บทช่วยสอนนี้จะอธิบายวิธีการทำ
ตัวอย่าง: การเปรียบเทียบ DataFrames สองตัวใน Pandas
สมมติว่าเรามี DataFrames แพนด้าสองตัวต่อไปนี้ ซึ่งแต่ละอันมีข้อมูลเกี่ยวกับผู้เล่นบาสเก็ตบอลสี่คน:
import pandas as pd #define DataFrame 1 df1 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'], 'points': [12, 15, 17, 24], 'assists': [4, 6, 7, 8]}) df1 player points assists 0 to 12 4 1 B 15 6 2 C 17 7 3 D 24 88 #define DataFrame 2 df2 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'], 'points': [12, 24, 26, 29], 'assists': [7, 8, 10, 13]}) df2 player points assists 0 to 12 7 1 B 24 8 2 C 26 10 3 D 29 13
ตัวอย่างที่ 1: ค้นหาว่า DataFrames ทั้งสองเหมือนกันหรือไม่
ก่อนอื่นเราสามารถทราบได้ว่า DataFrames ทั้งสองเหมือนกันหรือไม่โดยใช้ฟังก์ชัน DataFrame.equals() :
#see if two DataFrames are identical df1. equals (df2) False
DataFrames ทั้งสองค่าไม่มีค่าที่เหมือนกันทุกประการ ดังนั้นฟังก์ชันนี้จึงคืน ค่า False อย่างถูกต้อง
ตัวอย่างที่ 2: ค้นหาความแตกต่างในสถิติผู้เล่นระหว่าง DataFrames ทั้งสอง
เราสามารถค้นหาความแตกต่างระหว่างการแอสซิสต์และแต้มของผู้เล่นแต่ละคนได้โดยใช้ฟังก์ชัน pandas subtract()
#subtract df1 from df2 df2. set_index ('player'). subtract (df1.set_index('player')) assist points player At 0 3 B 9 2 C 9 3 D 5 5
วิธีการตีความนี้คือ:
- ผู้เล่น A มีจำนวนคะแนนเท่ากันใน DataFrame ทั้งสองตัว แต่เขามีอีก 3 แอสซิสต์ใน DataFrame 2
- ผู้เล่น B มีคะแนนมากกว่า 9 คะแนนและอีก 2 แอสซิสต์ใน DataFrame 2 เมื่อเทียบกับ DataFrame 1
- ผู้เล่น C มีคะแนนมากกว่า 9 คะแนนและผู้ช่วยอีก 3 คนใน DataFrame 2 เมื่อเทียบกับ DataFrame 1
- ผู้เล่น D มีคะแนนมากกว่า 5 คะแนนและอีก 5 แอสซิสต์ใน DataFrame 2 เมื่อเทียบกับ DataFrame 1
ตัวอย่างที่ 3: ค้นหาแถวทั้งหมดที่มีอยู่ใน DataFrame เดียวเท่านั้น
เราสามารถใช้โค้ดต่อไปนี้เพื่อรับรายการแถวทั้งหมดที่ปรากฏใน DataFrame เดียว:
#outer merge the two DataFrames, adding an indicator column called 'Exist' diff_df = pd. merge (df1, df2, how=' outer ', indicator=' Exist ') #find which rows don't exist in both DataFrames diff_df = diff_df. loc [diff_df[' Exist '] != ' both '] diff_df player points assists Exist 0 A 12 4 left_only 1 B 15 6 left_only 2 C 17 7 left_only 3 D 24 8 left_only 4 A 12 7 right_only 5 B 24 8 right_only 6 C 26 10 right_only 7 D 29 13 right_only
ในกรณีนี้ DataFrames ทั้งสองไม่ได้ใช้แถวที่เหมือนกัน ดังนั้นจึงมีทั้งหมด 8 แถวที่ปรากฏใน DataFrames อันใดอันหนึ่งเท่านั้น
คอลัมน์ที่มีข้อความว่า “มีอยู่” จะบอกเราได้อย่างสะดวกว่า DataFrame ใดที่แต่ละแถวปรากฏขึ้นโดยไม่ซ้ำกัน