كيفية مقارنة اثنين من dataframes في pandas
في كثير من الأحيان، قد تكون مهتمًا بمقارنة القيم بين اثنين من إطارات بيانات الباندا لاكتشاف أوجه التشابه والاختلاف بينهما.
يشرح هذا البرنامج التعليمي كيفية القيام بذلك.
مثال: مقارنة إطاري بيانات في Pandas
لنفترض أن لدينا إطاري بيانات الباندا التاليين، اللذين يحتوي كل منهما على بيانات عن أربعة من لاعبي كرة السلة:
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: اكتشف ما إذا كان إطارا البيانات متماثلين.
يمكننا أولاً معرفة ما إذا كان إطارا البيانات متطابقين باستخدام الدالة DataFrame.equals() :
#see if two DataFrames are identical df1. equals (df2) False
لا يحتوي إطارا البيانات على نفس القيم تمامًا، لذا تُرجع هذه الدالة False بشكل صحيح.
مثال 2: ابحث عن الاختلافات في إحصائيات اللاعب بين إطاري البيانات.
يمكننا العثور على الاختلافات بين تمريرات كل لاعب ونقاطه باستخدام وظيفة 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
وطريقة تفسير ذلك هي:
- حصل اللاعب “أ” على نفس عدد النقاط في كل من DataFrame، لكنه حصل على 3 تمريرات حاسمة في DataFrame 2.
- حصل اللاعب B على 9 نقاط إضافية وتمريرتين إضافيتين في 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
في هذه الحالة، لا يتشارك إطارا البيانات في صفوف متطابقة، لذلك يوجد 8 صفوف في المجمل تظهر فقط في أحد إطاري البيانات.
يخبرنا العمود المسمى “موجود” بسهولة بإطار البيانات الذي يظهر فيه كل صف بشكل فريد.