Например, давайте рассмотрим два недавно созданных фрейма данных:
import pandas as pd
# Creating the first dataframe
df1 = pd.DataFrame({"A":[1,5,7,8],
"B":[5,8,4,3],
"C":[10,4,9,3]})
# Creating the second dataframe
df2 = pd.DataFrame({"A":[5,3,6,4],
"B":[11,2,4,3],
"C":[4,3,8,5]})
Они выглядят так:
Не равное выражению !=
просто возвращает new df с true / false, где значения не равны .
stack
изменяет структуру данных с новыми индексами. Подробнее здесь .
resultBool = (df1 != df2).stack()
В приведенной выше строке сохраняется результирующее значение df (как показано на втором рисунке) впеременная.
Следующая строка отфильтровывает все ложные значения из нашего исходного кадра данных.
Обратите внимание, как индекс 2 B
отсутствует, так как значение в resultBool
df равно false.
Это означает, что значения в df1 и df2 для этой конкретной ячейки равны, поэтому результат оператора !=
равен false.
Мы делаем то же самое для df2 и просто объединяем результатыпо горизонтали. Подробнее о сцеплении панд здесь .
На приведенном выше изображении столбец «0» ссылается на значения в df1 и столбце«1» относится к значениям в df2.
Наконец, мы переименовываем эти столбцы в «output_01» и «output_02»:
Конечным результатом является новое выделение значений df, которые отличаются в обоих кадрах данных.