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