Как сравнить два столбца из фрейма данных и вернуть соответствующую запись, если совпадение найдено? - PullRequest
0 голосов
/ 26 апреля 2019

Я хочу сопоставить строки из 2-х фреймов данных и, если совпадение найдено, вернуть соответствующие результаты.Итак, мой первый фрейм данных содержит:

Name
abc
pqr
xyz

А второй фрейм данных содержит

Id Name
1 abc
2 lmn
3 pqr
4 qwe

Я хочу вернуть идентификатор путем сравнения (строка) столбцы Имя.И, кроме того, как добиться того же, если имя из abc будет сравниваться с полными именами из кадра данных 2.

Код, который я пробовал после объединения двух кадров данных: это функция, которая будет сравниватьстроки и возвращаемая разница.

def bit_func(x):
    dmp = diff_match_patch()
    patches = dmp.patch_make(x.Name1, x.Name2)
    diff = dmp.patch_toText(patches)
    return diff

И я попытался получить разницу, но код не работает.И я также хочу соответствующий идентификатор для имени, как вернуть то же самое?

df['diff'] = df.apply(bit_func, axis=1)

1 Ответ

1 голос
/ 26 апреля 2019

Вы можете просто использовать функцию pandas merge , чтобы показать совпадения между фреймами данных и идентификаторами, связанными с ними:

import pandas as pd

df1 = pd.DataFrame({'Name': ['abc', 'pqr', 'xyz']})
df2 = pd.DataFrame({'Name': ['abc', 'lmn', 'pqr', 'qwe'], 'Id': [1, 2, 3, 4]})

print(df1.merge(df2))

Вывод:

Name  Id
0  abc   1
1  pqr   3

Чтобы получить разницу между ними, используйте следующее:

df1.merge(df2, how='outer', indicator=True).query('_merge != "both"').drop('_merge', 1)

Какие выходные данные:

  Name   Id
2  xyz  NaN
3  lmn  2.0
4  qwe  4.0

Ссылка на эту запись для всех запросов на слияние

...