在python中基于两个文件的列坐标合并文件
我有一个名为snp.txt的文件,如下所示:在python中基于两个文件的列坐标合并文件,python,merge,pandas,Python,Merge,Pandas,我有一个名为snp.txt的文件,如下所示: chrom chromStart chromEnd name strand observed chr1 259 260 rs72477211 + A/G single chr1 433 433 rs56289060 + -/C insertion chr1 491 492 rs55998
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
我还有第二个文件gene.txt
chrom chromStart chromEnd tf_title tf_score
chr1 200 270 NFKB1 123
chr1 420 440 IRF4 234
chr1 488 550 BCL3 231
chr1 513 579 TCF12 12
chr1 582 583 BAD170 89
我想要的最终输出是:output.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
我希望能够做的关键事情是查看gene.txt,并检查snp.txt的name列中的rsnumber是否与chrom、chromStart和chromEnd建立的区域相同
例如:
在snp.txt的第一行
rsid rs72477211位于位置259和260之间的chr1上
现在在gene.txt中,NFKB1也在chr1上,但在位置200和270之间,
这意味着RSIDRS72477211位于NFKB1区域,因此这在输出txt中有所说明
我无法在使用熊猫合并功能时做到这一点,我甚至不知道从哪里开始。
这些文件非常大,因此循环效率非常低。
有人能帮忙吗?谢谢 如果适合内存,您可以仅基于
chrom
列使用outer
方法筛选两个数据帧,然后通过执行范围包含数学来过滤结果:
df = snp.merge(gene, how='outer', on='chrom')
df = df[(df.chromStart_x>=df.chromStart_y) & (df.chromEnd_x<=df.chromEnd_y)]
谢谢,你能解释一下你所说的chromStart_x和y是什么吗?这就是合并的工作原理:chromStart和chromend都存在于两个数据帧中,但我们只是按名称合并。它将向结果数据帧中的重复列添加后缀。看看合并文档
del test['chromStart_y']
del test['chromEnd_y']