Как мне написать функцию, которая считает одинаковые и разные идентификаторы в двух столбцах разного размера

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

Дан ссылочный фрейм данных A с одним столбцом «ID» (50 000 строк) и фреймами данных B, C, D, со столбцом «ID» с 45 000 строк, 55 000, 70 000 строк соответственно, причем каждый экземпляр «ID» представляет собой большое (семнадцатизначное) целое значение со многими одинаковыми значениямиво всех столбцах, но не обязательно в одной строке.

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

СТОЛБЦЫ:

A [‘ID’, 196, 202, 443, 781, 557]

B [‘ID’, 781, 488, 712, 202, 482, 311]

C [‘ID’, 889, 196, 302, 444]

D [‘ID’, 444, 202, 675]

ВВОД: A, B

ВЫВОД: совпадений: 2 Разница: 3

Комментарии:

1. Можете ли вы предоставить нам образец набора данных и ожидаемый результат для справки

2. одинаковые значения должны уменьшаться при использовании set() — и тогда вы можете сравнить len() , но это может дать небольшой неверный результат, когда одно значение больше 2 раз.

Ответ №1:

вы можете попробовать .isin() . Пример с pd.Series:

 A = pd.Series([196, 202, 443, 781, 557])

B = pd.Series([781, 488, 712, 202, 482, 311])

if len(A) >= len(B):
    matches = A.isin(B)
else:
    matches = B.isin(A)

mismatches = ~matches

print('matches: {}, mismatches: {}'.format(sum(matches), sum(mismatches))
 

сравнение длин выполняется так, чтобы было найдено правильное количество несоответствий. конечно, это не имело бы значения для поиска правильного количества совпадений. Интерпретация True как 1 и False как 0 позволяет суммировать числа.