Pandas: как сравнить два dataframe построчно
Вы можете использовать следующие методы для сравнения двух кадров данных pandas построчно:
Способ 1: сравнить фреймы данных и сохранить только строки с различиями
df_diff = df1. compare (df2, keep_equal= True , align_axis= 0 )
Способ 2: сравнить фреймы данных и сохранить все строки
df_diff = df1. compare (df2, keep_equal= True , keep_shape= True , align_axis= 0 )
В следующих примерах показано, как использовать каждый метод со следующими кадрами данных pandas:
import pandas as pd #create first DataFrame df1 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D'], ' points ': [18, 22, 19, 14], ' assists ': [5, 7, 7, 9]}) print (df1) team points assists 0 to 18 5 1 B 22 7 2 C 19 7 3 D 14 9 #create second DataFrame df2 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'E'], ' points ': [18, 30, 19, 20], ' assists ': [5, 7, 7, 9]}) print (df2) team points assists 0 to 18 5 1 B 30 7 2 C 19 7 3 E 20 9
Пример 1. Сравните DataFrames и сохраните только строки с различиями.
Следующий код показывает, как сравнить два DataFrames построчно и сохранить только те строки, которые имеют различия хотя бы в одном столбце:
#compare DataFrames and only keep rows with differences
df_diff = df1. compare (df2, keep_equal= True , align_axis= 0 )
#view results
print (df_diff)
team points
1 coil B 22
other B 30
3 choke D 14
other E 20
Мы видим, что DataFrames имеет две разные строки.
В частности, мы видим, что строки в позициях индекса 1 и 3 каждого DataFrame имеют разные значения как минимум в одном столбце.
Значения в строке self отображают значения первого DataFrame, а значения в другой строке отображают значения второго DataFrame.
Например, мы можем увидеть:
- Строка в индексной позиции 1 первого DataFrame содержит B в столбце команды и 22 в столбце очков.
- Строка в индексной позиции 1 второго DataFrame содержит B в столбце команды и 30 в столбце очков.
Примечание . Аргумент Keep_equal=True указывает пандам сохранять значения равными. В противном случае равные значения отображаются как NaN.
Пример 2. Сравнить фреймы данных и сохранить все строки
В следующем коде показано, как использовать аргумент Keep_shape=True для сравнения двух DataFrames построчно и сохранения всех строк из исходных DataFrames:
#compare DataFrames and keep all rows
df_diff = df1. compare (df2, keep_equal= True , keep_shape= True , align_axis= 0 )
#view results
print (df_diff)
team points assists
0 choke A 18 5
other A 18 5
1 coil B 22 7
other B 30 7
2 choke C 19 7
other C 19 7
3 choke D 14 9
other E 20 9
Полученный DataFrame содержит все строки и столбцы исходных DataFrame.
Примечание № 1. Функция Compare() предполагает, что два DataFrame имеют одинаковые размеры.
Примечание №2: Полную документацию по функции сравнения() панд можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:
Панды: как сравнить два столбца
Панды: как сравнить три столбца
Pandas: как сравнить столбцы в двух разных DataFrames