我有一个熊猫df:
0 1 2 3
0 chr1 69090 70008 OR4F5|CDS3
1 chr1 450739 451678 OR4F29|CDS1
2 chr1 925917 926037 SAMD11|CDS2
3 chr1 930154 930336 SAM|CDS2
4 chr1 940555 947899 ERSAM|CDS1
5 chr1 944686 944806 NOC2L|CDS3
6 chr1 945041 945161 NOC2L|CDS3
和一个列表:
genes = ["OR4F5", "SAM"]
如何提取列表中完全匹配的行?
out = pd.DataFrame()
for gene in genes:
out = pd.concat([out, df[df[3].str.match(gene)]])
收益:
0 1 2 3
0 chr1 69090 70008 OR4F5|CDS3
2 chr1 925917 926037 SAMD11|CDS2
3 chr1 930154 930336 SAM|CDS2
所需的输出是:
0 1 2 3
0 chr1 69090 70008 OR4F5|CDS3
3 chr1 930154 930336 SAM|CDS2
很高兴看到正则表达式的解决方案,因为我一直在努力解决这个问题,但无法使其正常工作。
答案 0 :(得分:3)
IIUC str.split
+ isin
df[df['3'].str.split('|',expand=True).isin(genes).any(1)]
Out[252]:
0 1 2 3
0 chr1 69090 70008 OR4F5|CDS3
3 chr1 930154 930336 SAM|CDS2