Я хочу сопоставить два столбца данных в python

У меня есть два фрейма данных df1 (запись 35k) и df2 (запись 100k). В df1['col1'] и df2['col3'] у меня есть уникальные идентификаторы. Я хочу сопоставить df1['col1'] с df2['col3']. Если они совпадают, я хочу обновить df1 еще одним столбцом, скажем, df1['Match'] со значением true, а если не совпадают, обновить со значением False. Я хочу сопоставить это значение TRUE и False только с совпадающими и несовпадающими записями.

Я использую функцию .isin(), я получаю правильное совпадение и количество совпадений, но не могу правильно их сопоставить.

Match = df1['col1'].isin(df2['col3'])
df1['match'] = Match

Я также использовал функцию слияния, передав параметр how=right, но не получил результатов.

Что вы имеете в виду под неправильным отображением? Используя ваш синтаксис, df1['match'] = df1['col1'].isin(df2['col3']), кажется, работает для вашей описанной цели. Строки df1, значение col1 которых найдено в df2['col3'], будут иметь значение True, в противном случае — False.

kentwait 27.01.2019 09:27

@kentwait После выполнения df1['match'] = Match, если у меня есть совпадения 10 записей. то в df1 он просто обновляется последовательно, но не до точной записи, которой он соответствует.

Aditya 27.01.2019 09:35

Количество строк, возвращаемых df1['col1'].isin(df2['col3']), равно количеству строк df1, независимо от того, сколько найденных совпадающих «истинных» записей. Вы можете попробовать ответить @crazyGamer, но ваш код должен работать нормально. Может быть, что-то еще не так.

kentwait 27.01.2019 09:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
4 853
2

Ответы 2

Используйте индексацию df.loc:

df1['Match'] = False
df1.loc[df1['col1'].isin(df2['col3']), 'Match'] = True

@crazyGamer- спасибо, это работает для меня .. Могу ли я также сопоставить значение df2['col3'] для случаев True?

Aditya 28.01.2019 18:13

Да, вы можете повторить этот шаблон для df2 и col3. Как это работает: первая строка создает новый столбец и устанавливает для всех значений значение False. Вторая строка индексирует строки, используя логический ряд, и устанавливает для этих строк значение True.

crazyGamer 29.01.2019 07:02

Вы можете просто сделать следующее:

df1['Match'] = df1['col1'].isin(df2['col3'])

Например:

import pandas as pd
data1 = [1,2,3,4,5]
data2 = [2,3,5]
df1 = pd.DataFrame(data1, columns=['a'])
df2 = pd.DataFrame(data2,columns=['c'])
print (df1)
print (df2)
df1['Match'] = df1['a'].isin(df2['c']) # if matches it returns True else False
print (df1)

Вывод:

  a
0  1
1  2
2  3
3  4
4  5

   c
0  2
1  3
2  5

   a  Match
0  1  False
1  2   True
2  3   True
3  4  False
4  5   True

Это то же самое, что и OP без промежуточной переменной. Должно быть что-то еще, с чем сталкивается ОП.

kentwait 27.01.2019 10:37

@Ranjith - это тоже не работает ... как в вашем примере, все значения отсортированы, если они не отсортированы, они не будут работать ... код, которым вы делитесь, - это то, что я уже делаю. пожалуйста, проверьте мой код

Aditya 27.01.2019 11:59

Другие вопросы по теме