熊猫isin基于两列

时间:2020-04-15 18:49:56

标签: python pandas dataframe

假设我有以下两个数据框:

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 个答案:

答案 0 :(得分:3)

我们有mergeindicator

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 :(得分:1)

这是我的贡献:

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