我有如下三个数据框:
df1
col1 CAND_SNP
1 a1
1 a2
1 a3
1 a4
2 b1
3 c1
3 c2
3 c3
df2
col1 LEAD_SNP
1 a1
2 b1
3 c1
df3
snp col2
a3 x1
a21 x2
a31 x3
a41 x4
b11 x5
c11 x6
c21 x7
c31 x8
我需要将 df1
的 CAND_SNP
与 df3
的 snp
进行匹配,以填充 中的新列>df2
,值为 "yes"
或 "no"
。对于 df1
的 col1
,匹配需要分组。在上面的示例中,df1
的col1
中有3 个组。如果这些组在 CAND_SNP
中的任何对应值与 df3
的 snp
匹配,则 df2
的新列将是"yes"
如下:有什么帮助吗?
df2
col1 LEAD_SNP col3
1 a1 Yes
2 b1 No
3 c1 No
最佳答案
如果我没理解错的话,你可以将df1
按col1
分组,然后查看col1<中是否存在
的 col2
的值df3
。然后与df2
合并:
df1['col3'] = df1.groupby('col1')['CAND_SNP'].apply(lambda s: s.isin(df3['snp']))
df2 = df2.merge(df1.groupby('col1')['col3'].any(), left_on='col1', right_index=True, how='left')
如果您需要'Yes'
/'No'
作为值,请使用
df2.col3.map({True: 'Yes', False: 'No'})
关于python - 添加一列与其他两列匹配,一列包含代表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69030054/