วิธีเปรียบเทียบ 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 ใดที่แต่ละแถวปรากฏขึ้นโดยไม่ซ้ำกัน

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *