Pandas在子串中找到完美的匹配

2024-10-04 07:38:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题:

      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

我很想看看regex的解决方案,因为我一直在想办法解决这个问题,但没办法


Tags: dfsamoutpdchr1gene办法genes
1条回答
网友
1楼 · 发布于 2024-10-04 07:38:21

IIUCstr.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

相关问题 更多 >