У меня есть два 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», чтобы генерировать лямбда-функцию, но ничего не придумал.
Таким образом, надеюсь, что вы можете мне помочь ...
Пожалуйста, проверьте этот [ответ] (http://stackoverflow.com/a/34953669/2901002) – jezrael
@jezeral. Если я попробую ответить, вы предложите мне получить ошибку памяти для pd.merge (df1, df2, on = ['Chromosome']). df1 имеет> 10.000 строк, а df2 2 имеет> 6 миллионов строк. Я уже уменьшил dfs до нескольких столбцов, которые необходимы для задачи, но я все равно получаю ту же ошибку. – SGeuer
Точно, есть проблема в больших кадрах данных ... К сожалению. – jezrael