У меня есть два фрейма данных разной длины.
df1
gene_name chr start stop gene
0 ARNTL chr11 13376772 13376843 gene_name
1 ARNTL chr11 13393709 13393956 gene_name
2 PPP4R1 chr18 9595015 9595151 gene_name
3 PPP4R1 chr18 9595015 9595151 gene_name
4 SLC9B1 chr4 103806204 103806485 gene_name
... ... ... ... ... ...
4640 GCDH chr19 13010281 13010813 gene_name
4641 ARL4A chr7 12727790 12730558 gene_name
4642 ARL4A chr7 12727790 12730558 gene_name
4643 SMURF1 chr7 98630659 98630744 gene_name
4644 TSTD1 chr1 161007421 161007865 gene_name
4645 rows × 5 columns
d3
chr start stop exon exon_number gene gene_name
0 chr1 901877 901994 exon_number 1 gene_name PLEKHN1
1 chr1 902084 902183 exon_number 2 gene_name PLEKHN1
2 chr1 905657 905803 exon_number 3 gene_name PLEKHN1
3 chr1 905901 905981 exon_number 4 gene_name PLEKHN1
4 chr1 906066 906138 exon_number 5 gene_name PLEKHN1
... ... ... ... ... ... ... ...
243869 chrY 15526615 15526673 exon_number 5 gene_name UTY
243870 chrY 15522873 15522993 exon_number 6 gene_name UTY
243871 chrY 15508182 15508852 exon_number 7 gene_name UTY
243872 chrY 15591394 15591803 exon_number 1 gene_name UTY
243873 chrY 15590922 15591197 exon_number 2 gene_name UTY
243874 rows × 7 columns
Я пытаюсь перебирать строки df1 и сравнивать их с d3
вот мой текущий код.
for r,i in df1.iterrows():
for row, items in d3.iterrows():
if i[1] == items[0] and i[2] >= items[1] and i[3] <= items[2] and i[0] == items[6]:
print(i,items)
это выполняет свою работу, но требует довольно много времени для запуска на таком большом количестве строк.
Я хотел бы векторизовать это, но убедитесь, как лучше поступить.