Pandas isin на основе двух столбцов - PullRequest
2 голосов
/ 15 апреля 2020

Предположим, у меня есть следующие два кадра данных:

df = pd.DataFrame({'col1':['a','b', 'c'], 'col2': ['q', 'w', 'e']})

df1 = pd.DataFrame({'col1': ['c', 'b', 'b', 'r','a', 'l', 'c'], 'col2': ['e', 'w', 'q', 'u', 'q', 'w', 'q']})
print(df)
col1    col2
a   q
b   w
c   e

print(df1)
col1 col2
   c    e
   b    w
   b    q
   r    u
   a    q
   l    w
   c    q

Я хочу найти все пары в df1, которые находятся в df, и вернуть в новом столбце, мой ожидаемый результат будет:

col1 col2   col3
   c    e   True
   b    w   True
   b    q  False
   r    u  False
   a    q   True
   l    w  False
   c    q  False

Я знаю, что это можно сделать путем объединения столбцов с помощью создания ключа, но я хотел бы сейчас, если есть краткий способ сделать это, что-то вроде:

df1.isin(df) #doesn't work

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

У нас есть merge с indicator

s=df1.merge(df,indicator=True,how='left')
s['col3']=s['_merge']=='both'
s
  col1 col2     _merge
0    c    e       both
1    b    w       both
2    b    q  left_only
3    r    u  left_only
4    a    q       both
5    l    w  left_only
6    c    q  left_only
1 голос
/ 15 апреля 2020

Вот мой вклад:

df1['col3'] = None
for key, tup in enumerate(list(zip(df1.col1,df1.col2))):
    if tup in list(zip(df.col1,df.col2)):
        df1['col3'].iloc[key] = True
    else:
        df1['col3'].iloc[key] = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...