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, но тогда будут проблемы, если у вас в датафрейме разные типы данных. приведенный же мной метод будет работать и в этом случае.
Причем, как можно заметить, здесь сохраняются исходные индексы.