Как сравнить два dataframe в pandas
Часто вам может быть интересно сравнить значения между двумя кадрами данных panda, чтобы выявить их сходства и различия.
В этом уроке объясняется, как это сделать.
Пример: сравнение двух DataFrame в Pandas
Предположим, у нас есть следующие два DataFrame panda, каждый из которых содержит данные о четырех баскетболистах:
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.
Сначала мы можем выяснить, идентичны ли два DataFrame, используя функцию DataFrame.equals() :
#see if two DataFrames are identical df1. equals (df2) False
Два DataFrame не содержат одни и те же значения, поэтому эта функция правильно возвращает False .
Пример 2. Найдите различия в статистике игроков между двумя DataFrame.
Мы можем найти разницу между передачами и очками каждого игрока, используя функцию 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, но в DataFrame 2 у него было на 3 передачи больше.
- Игрок Б набрал на 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
В этом случае два DataFrame не имеют одинаковых строк, поэтому всего 8 строк появляются только в одном из DataFrames.
Столбец с надписью «Существует» удобно сообщает нам, в каком DataFrame уникально отображается каждая строка.