如何将一个数据帧(多于一列)的值与另一数据帧(多于一列)的值匹配?

时间:2020-05-23 17:50:35

标签: python pandas

df1:

    Symbol           Aliases
0   MLH1             COCA2, FCC2, HNPCC, HNPCC2, hMLH1
1   MSH2             COCA1, FCC1, HNPCC, HNPCC1, LCFS2
2   CCAT2            LINC00873, NCCP1
3   MACC1            7A5, SH3BP4L

在这里,别名可以具有NaN值。

df2:

   Symbol_1        Symbol_2
0  NaN             DHX9
1  COCA1           MSH2
2  H2AC18          NaN
3  NCCP1           NaN

我希望结果作为一个列表,其中包含df1和df2中所有相同的符号。

same_list = [MSH2, CCAT2]

如果df2 ['Symbol_1','Symbol_2']与df1 ['Symbol']相匹配,它将打印Symbol,但如果与df1 ['Aliases']相匹配,它将从df1打印对应的Symbol。

我们可以看到NCCP1与df1 ['Aliases']相匹配,但是它将打印相应的符号,即CCAT2

1 个答案:

答案 0 :(得分:0)

您可以使用flatten()set()来获取值。

如果df1是:

  Symbol                        Aliases
0   MLH1  COCA2,FCC2,HNPCC,HNPCC2,hMLH1
1   MSH2  COCA1,FCC1,HNPCC,HNPCC1,LCFS2
2  CCAT2                LINC00873,NCCP1
3  MACC1                    7A5,SH3BP4L

df2是:

Symbol_1 Symbol_2
0      NaN     DHX9
1    COCA1     MSH2
2   H2AC18      NaN
3    NCCP1      NaN

然后使用此脚本:

df1.Aliases = df1.Aliases.str.split(',')
s1 = set(df1.explode('Aliases').values.flatten())
s2 = set(df2.values.flatten())
print(s1 & s2)

打印:

{'NCCP1', 'COCA1', 'MSH2'}