#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 позволяет суммировать числа.