Python 查找2列的2个dataframe的公共行

Python 查找2列的2个dataframe的公共行,python,pandas,Python,Pandas,我有两个数据帧,如下所示: DF1= A B C D 0 AA BA KK 0 1 AD BD LL 0 2 AF BF MM 0 DF2= K L 0 AA BA 1 AD BF 最后,我想得到的是: DF1= A B C D 0 AA BA KK 1 1 AD BD LL 0 2 AF BF MM 0 所以,我想比较两个数据帧

我有两个数据帧,如下所示:

DF1=
    A    B   C    D
0   AA   BA  KK   0
1   AD   BD  LL   0
2   AF   BF  MM   0

DF2=
    K    L
0   AA   BA
1   AD   BF
最后,我想得到的是:

DF1=
    A    B   C    D
0   AA   BA  KK   1
1   AD   BD  LL   0
2   AF   BF  MM   0
所以,我想比较两个数据帧,我想看看第一个数据帧(A列和B列)的哪些行与第二个数据帧(K列和L列)的哪些行相同,并在第一个数据帧的coulmn D上赋值1

我一直在使用以下代码:

print (df1['A'].isin(df2['A']) & df1['B'].isin(df2['B'])).astype(int)
但这并不是我所期望的


如何实现这一点?

一种方法是使用
merge
函数选择要加入的键

因此,首先,如果我们在
DF2
中创建某种指标,并加入,我们有:

DF2['inDF2'] = 1
DF3 = pd.merge(DF1, DF2, how='left', left_on=['A', 'B'], right_on=['K', 'L'])
然后,只需添加列
D
inDF2
,即可获得所需的结果

DF3['D'] = DF3['D'] + DF3['inDF2'].fillna(0)
删除相关列将获得您要查找的数据集:

DF3.drop(['K', 'L', 'inDF2'], axis=1, inplace=True)
对于输出:

>>> DF3
    A   B   C  D
0  AA  BA  KK  1
1  AD  BD  LL  0
2  AF  BF  MM  0

完整代码:

import pandas as pd

d1 = {
'A' : ['AA', 'AD', 'AF'],
'B' : ['BA', 'BD', 'BF'],
'C' : ['KK', 'LL', 'MM'],
'D' : [0, 0, 0]
}

d2 = {
'K' : ['AA', 'AD'],
'L' : ['BA', 'BF']
}

DF1 = pd.DataFrame(data=d1)
DF2 = pd.DataFrame(data=d2)
DF2['inDF2'] = 1

DF3 = pd.merge(DF1, DF2, how='left', left_on=['A', 'B'], right_on=['K', 'L'])
DF3['D'] = DF3['D'] + DF3['inDF2'].fillna(0)
DF3.drop(['K', 'L', 'inDF2'], axis=1, inplace=True)

一种方法是使用
merge
函数选择要加入的键

因此,首先,如果我们在
DF2
中创建某种指标,并加入,我们有:

DF2['inDF2'] = 1
DF3 = pd.merge(DF1, DF2, how='left', left_on=['A', 'B'], right_on=['K', 'L'])
然后,只需添加列
D
inDF2
,即可获得所需的结果

DF3['D'] = DF3['D'] + DF3['inDF2'].fillna(0)
删除相关列将获得您要查找的数据集:

DF3.drop(['K', 'L', 'inDF2'], axis=1, inplace=True)
对于输出:

>>> DF3
    A   B   C  D
0  AA  BA  KK  1
1  AD  BD  LL  0
2  AF  BF  MM  0

完整代码:

import pandas as pd

d1 = {
'A' : ['AA', 'AD', 'AF'],
'B' : ['BA', 'BD', 'BF'],
'C' : ['KK', 'LL', 'MM'],
'D' : [0, 0, 0]
}

d2 = {
'K' : ['AA', 'AD'],
'L' : ['BA', 'BF']
}

DF1 = pd.DataFrame(data=d1)
DF2 = pd.DataFrame(data=d2)
DF2['inDF2'] = 1

DF3 = pd.merge(DF1, DF2, how='left', left_on=['A', 'B'], right_on=['K', 'L'])
DF3['D'] = DF3['D'] + DF3['inDF2'].fillna(0)
DF3.drop(['K', 'L', 'inDF2'], axis=1, inplace=True)

我认为这个问题属于StackOverflow,希望版主能为您迁移到那里。我认为这个问题属于StackOverflow,希望版主能为您迁移到那里。