熊猫在子串中找到完美匹配

时间:2019-10-31 14:25:39

标签: python pandas

我有一个熊猫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

很高兴看到正则表达式的解决方案,因为我一直在努力解决这个问题,但无法使其正常工作。

1 个答案:

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