【问题标题】:merging files based on column coordinates of two files in python基于python中两个文件的列坐标合并文件
【发布时间】:2013-07-01 16:23:52
【问题描述】:

我有一个名为 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  

我有第二个文件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的名称列中的rsnumber是否在由chrom、chromStart和chromEnd建立的同一区域中。

例如:

在snp.txt的第一行 rsid rs72477211 位于 chr1 的位置 259 和 260 之间。

现在在gene.txt中,NFKB1也在chr1上,但在位置200和270之间, 这意味着 rsid rs72477211 位于 NFKB1 区域,因此在输出 txt 中会注明。

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

【问题讨论】:

    标签: python merge pandas


    【解决方案1】:

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

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

    您最终可以删除重复的列:

    del test['chromStart_y']
    del test['chromEnd_y']
    

    【讨论】:

    • 谢谢,你能解释一下你所说的 chromStart_x 和 y 是什么吗?
    • 这就是合并的工作原理:chromstart 和 chromend 都存在于两个数据帧中,但我们只合并名称。它将为结果数据框中的重复列添加后缀。查看合并文档
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多