熊猫合并行匹配的数据帧并附加值

时间:2021-01-18 14:27:23

标签: python pandas

我有两个数据框:

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,但似乎无法获得所需的输出。

谢谢。

1 个答案:

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