Как сравнить два кадра данных в Pandas


Часто вам может быть интересно сравнить значения между двумя пандами 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 A 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 A 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'))

 points assists
player 
A 0 3
B 9 2
C 9 3
D 5 5

Интерпретировать это можно следующим образом:

  • У игрока А было одинаковое количество очков в обоих DataFrame, но у него было на 3 передачи больше в DataFrame 2.
  • У игрока Б было на 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 уникально появляется каждая строка.

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.