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