Python中精准计算两个DataFrame的基因组重叠与非重叠区间
区间重叠分析需求及问题反馈
核心需求
需要获取DF1与DF2的精确重叠区间,以及DF1中与DF2不重叠的区间,需覆盖两类场景:
- DF1中完全不与DF2重叠的行
- DF1中与DF2部分重叠的行
关键难点
- 处理部分重叠行时,必须保证同一染色体的所有输出区间(重叠/非重叠)内部无重叠冲突。例如:若某行拆分出的非重叠区间是1-59,但同一染色体上其他行存在10-20的重叠区间,那么需剔除10-20部分,仅保留1-9、21-59作为有效非重叠区间
- 结果验证标准:所有重叠区间与非重叠区间的总长度,必须等于DF1对应区域的总长度
示例说明
示例数据
DF1数据:
chr start end 1 1 100 1 150 200 2 5 10
DF2数据:
chr start end 1 10 20 1 60 260 1 500 550 2 1 20
预期结果分析
- 染色体1的重叠区间:10-20、60-100、150-200
- 染色体1的非重叠区间:1-9、21-59
- 染色体2的非重叠区间:无(DF1的5-10完全被DF2的1-20覆盖)
长度验证(忽略染色体2)
DF1总碱基数:(100-1+1)+(200-150+1)=151
各区间长度之和:9+11+39+41+51=151,与DF1总长度匹配
测试反馈:现有方案不符合预期
测试数据
DF1总碱基数=137:
Chromosome Start End 0 chr1 200 227 1 chr1 613 721
DF2数据:
Chromosome Start End 0 chr1 1000 1227
预期输出
Chromosome Start End merge 0 chr1 200 227 left_only 1 chr1 613 721 left_only 2 chr1 1000 1227 right_only #[可选包含right_only]
- 预期left_only总碱基数=137,与DF1总长度一致
错误输出
Chromosome_ range_first range_last _merge_first 1 chr1 1 200 721 left_only
- 错误点:left_only总碱基数=522,与DF1实际长度不符;错误包含了DF1中不存在的228-612区域,该区域不属于DF1或DF2,不应出现在结果中
内容的提问来源于stack exchange,提问作者youtube
相关产品推荐
相关产品推荐

