我有两个数据框:
DF1
A B
'a' 'x'
'b' 'y'
'c' 'z'
DF2
Col1 Col2
'j' 'm'
'a' 'x'
'k' 'n'
'b' 'y'
并且想要查找DF1中的行是否包含在DF2中,然后将该列Bool_col添加到DF1中,如下所示。
DF1
A B Bool_col
'a' 'x' True
'b' 'y' True
'c' 'z' False
我尝试在Col1和Col2的串联列表中查找A和B的串联,但是我的数据给我带来了意外的麻烦。在不连接列的情况下如何执行此操作有任何帮助吗?
答案 0 :(得分:3)
将merge
与indicator
参数一起使用,然后检查哪些行显示“两个”。
df1['Bool_col'] = (df1.merge(df2,
how='left',
left_on=['A', 'B'],
right_on=['Col1', 'Col2'],
indicator=True)
.eval('_merge == "both"'))
df1
A B Bool_col
0 'a' 'x' True
1 'b' 'y' True
2 'c' 'z' False
答案 1 :(得分:3)
df = df1.merge(df2, how='left', indicator=True, left_on=['A','B'], right_on=['Col1','Col2'])
df['Bool_col'] = np.where(df['_merge']=='both', True, False)
df.drop(['_merge','Col1','Col2'], 1, inplace=True)
print(df)
输出:
A B Bool_col
0 a x True
1 b y True
2 c z False
修改
根据注释中建议的@ cs95,此处np.where
是不必要的。
您只需完成
df1['Bool_col'] = df['_merge']=='both'
# df.drop(['_merge','Col1','Col2'], 1, inplace=True)