python中基于两个文件列坐标的文件合并

2024-04-26 00:23:21 发布

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

我有一个文件叫做snp.txt文件看起来像这样:

chrom   chromStart  chromEnd    name    strand     observed     
chr1    259         260      rs72477211  +   A/G    single  
chr1    433         433      rs56289060  +   -/C    insertion   
chr1    491         492      rs55998931  +   C/T    single  
chr1    518         519      rs62636508  +   C/G    single  
chr1    582         583      rs58108140  +   A/G    single  

我有第二份文件基因.txt在

^{pr2}$

我想要的最终结果是:输出.txt在

chrom   chromStart  chromEnd    name    strand  observed    tf_title    tf_score
chr1    259         260      rs72477211    +    A/G         NFKB1       123
chr1    433         433      rs56289060    +    -/C         IRF4        234
chr1    491         492      rs55998931    +    C/T         BCL3        231
chr1    518         519      rs62636508    +    C/G         TCF12       12
chr1    582         583      rs58108140    +    A/G         BAD170      89

我想做的关键是基因.txt并检查snp.txt文件在由chrom、chromStart和chromEnd建立的同一区域中。在

例如:

在第一排snp.txt文件 rsid rs72477211位于位置259和260之间的chr1上。在

现在在基因.txt,NFKB1也在chr1上,但在位置200和270之间, 这意味着rsidrs72477211位于NFKB1区域,因此在输出txt中注明了这一点。在

在使用pandas merge函数时我无法做到这一点,我甚至不知道从哪里开始。 文件非常大,因此循环效率非常低。 有人能帮忙吗?谢谢!在


Tags: 文件nametxt基因chr1snpsinglechrom
1条回答
网友
1楼 · 发布于 2024-04-26 00:23:21

如果它适合内存,您可以使用outer方法将两个数据帧outer仅基于chrom列,然后通过执行范围包含数学来过滤结果:

df = snp.merge(gene, how='outer', on='chrom')
df = df[(df.chromStart_x>=df.chromStart_y) & (df.chromEnd_x<=df.chromEnd_y)]

最终可以删除重复列:

^{pr2}$

相关问题 更多 >