Pandas: сравнить два df

Есть несколько df, как можно из сравнить через pandas для получения слудеюущего результата:

df

A  B  C  D  F
12 34 55 5t yh
33 rt gg 34 rr
wd fg tg hh jm

df1

A  B  C  D  F
12 34 55 5t yh
56 55 55 55 55

При сравнение получить следующий результат: df2

A  B  C  D  F
56 55 55 55 55

сравнись df1 c df и вывести строки из df1 которые отсутствуют в df


Ответы (2 шт):

Автор решения: CrazyElf

Наверное, можно короче как-то, но я только через вычитание множеств догадаться смог:

import pandas as pd

data = """A  B  C  D  F
12 34 55 5t yh
33 rt gg 34 rr
wd fg tg hh jm""".split('\n')
data = list(map(str.split, data))
df = pd.DataFrame(data[1:], columns=data[0])

data = """A  B  C  D  F
12 34 55 5t yh
56 55 55 55 55""".split('\n')
data = list(map(str.split, data))
df1 = pd.DataFrame(data[1:], columns=data[0])

func = lambda x: set(map(tuple, x.values))
df2 = pd.DataFrame(func(df1) - func(df), columns=df.columns)
df2

Вывод:

     A   B   C   D   F
0   56  55  55  55  55
→ Ссылка
Автор решения: strawdog

Вообще, должно работать универсальное решение:

res = df1[(~df1.isin(df))].dropna()

res:

    A   B   C   D   F
1  56  55  55  55  55

можно было бы поработать с методом merge, но тогда будут проблемы, если у вас в датафрейме разные типы данных. приведенный же мной метод будет работать и в этом случае.

Причем, как можно заметить, здесь сохраняются исходные индексы.

→ Ссылка