2017-02-16 3 views
0

У меня есть два dfs и поиск способа выбора (и подсчета) строк df1 на основе строк в df2.выбор строк на основе строк во втором столбце

Это мой df1:

 Chromosome Start position End position Reference Variant reads \ 
0  chr1  109419841  109419841   C  T  1 
1  chr1  197008365  197008365   C  T  1 

    variation reads % variation     gDNA nomencl \ 
0    1   100 Chr1(GRCh37):g.109419841C>T 
1    1   100 Chr1(GRCh37):g.197008365C>T 

      cDNA nomencl ... exon transcript ID   inheritance \ 
0 NM_013296.4:c.-258C>T ...  2 NM_013296.4 Autosomal recessive 
1 NM_001994.2:c.*143G>A ...  UTR NM_001994.2 Autosomal recessive 

    test type      Phenotype male coverage male ratio covered \ 
0 Unknown Deafness, autosomal recessief    0     0 
1 Unknown   Factor 13 deficientie    0     0 

    female coverage female ratio covered ratio M:F 
0    1     1  0.0 
1    1     1  0.0 

df1 имеет следующие столбцы:

Chromosome    10561 non-null object 
Start position   10561 non-null int64 
End position    10561 non-null int64 
Reference     10415 non-null object 
Variant     10536 non-null object 
reads      10561 non-null int64 
variation reads   10561 non-null int64 
% variation    10561 non-null int64 
gDNA nomencl    10561 non-null object 
cDNA nomencl    10446 non-null object 
protein nomencl   9997 non-null object 
classification   10561 non-null object 
status     10561 non-null object 
gene      10560 non-null object 
Sanger sequencing list 10561 non-null object 
exon      10502 non-null object 
transcript ID    10460 non-null object 
inheritance    8259 non-null object 
test type     10561 non-null object 
Phenotype     10380 non-null object 
male coverage    10561 non-null int64 
male ratio covered  10561 non-null int64 
female coverage   10561 non-null int64 
female ratio covered  10561 non-null int64 

и это df2:

Chromosome Startposition Endposition Bases Meancoverage \ 
0  chr1  11073785  11074022 27831.0 117.927966 
1  chr1  11076901  11077064 11803.0  72.411043 

    Mediancoverage Ratiocovered>10X Ratiocovered>20X Genename Componentnr \ 
0   97.0    1.0    1.0 TARDBP   1 
1   76.0    1.0    1.0 TARDBP   2 

    PositionGenes   PositionGenome      Position 
0  TARDBP.1 chr1.11073785-11074022 comp.1_chr1.11073785-11074022 
1  TARDBP.2 chr1.11076901-11077064 comp.2_chr1.11076901-11077064 

Я хочу, чтобы выбрать все строки из df1, которые имеют в df2

  • такое же значение 'Хромосома'
  • df1 [ 'Исходное положение']> = df2.Startposition
  • df1 [ 'Конечное положение'] = < df2.Endposition.

Если эти три критерия выполнены в той же строке df2, я хочу выбрать соответствующую строку в df1.

Я уже сплавил три столбца «Хромосома», «Старт» и «Конце» в «PositionGenome», чтобы генерировать лямбда-функцию, но ничего не придумал.

Таким образом, надеюсь, что вы можете мне помочь ...

+0

Пожалуйста, проверьте этот [ответ] (http://stackoverflow.com/a/34953669/2901002) – jezrael

+0

@jezeral. Если я попробую ответить, вы предложите мне получить ошибку памяти для pd.merge (df1, df2, on = ['Chromosome']). df1 имеет> 10.000 строк, а df2 2 имеет> 6 миллионов строк. Я уже уменьшил dfs до нескольких столбцов, которые необходимы для задачи, но я все равно получаю ту же ошибку. – SGeuer

+0

Точно, есть проблема в больших кадрах данных ... К сожалению. – jezrael

ответ

0

Короткий updata: В конце концов я решил проблему с Unix bedtools -WB. Тем не менее, я был бы рад, если бы кто-нибудь смог найти решение на основе python.

+0

Извините, последнее сообщение было неполным. это решение: bedtools intersect -a file1.bed -b file2.bed -wb – SGeuer

Смежные вопросы