我有两个数据框:
df1:
Chr Pos qual
0 1 1234 2
1 2 5678 6
2 1 1111 4
3 5 0123 30
df2:
Chr Pos
0 1 1234
1 5 0123
2 3 1111
3 1 01234
如果 df2 中的行与 df1 中的行匹配,则将 qual 值附加到 df2。 如果不是,则将行保留在 df2 中,但将 NaN 添加到 df2。
期望的输出:
Chr Pos qual
0 1 1234 2
1 1 1111 NaN
2 1 01234 NaN
3 2 5678 NaN
4 3 1111 NaN
5 5 0123 30
请注意,在这种情况下,Pos 列需要保留为字符串。
data = {'Chr':[1,2,1,5],
'Pos':['1234','5678','1111','0123'],
'qual':[2,6,4,30]}
df1 = pd.DataFrame(data)
data2 = {'Chr':[1,5,3,1],
'Pos':['1234','0123','1111','01234']}
df2 = pd.DataFrame(data2)
我尝试使用 pd.merge() 和 iterrows,但似乎无法获得所需的输出。
谢谢。
答案 0 :(得分:0)
如果我理解正确的话应该是:
import numpy as np
df3 = pd.merge(df1,df2,how='outer',on=['Chr','Pos'],indicator=True)
df3.loc[df3._merge != "both",'qual']= np.nan
df3.drop(columns='_merge',inplace=True)
df3