Допустим, у меня есть два кадра данных ниже.
В действительности оба кадра данных будут иметь около миллиона строк каждый, поэтому я хотел бы найти наиболее эффективный способ сравнения:
- каждого df2 ["BaseCall"] с каждымdf1 ["seq"]
- возвращает фрейм данных, содержащий список позиций в каждом df1 ["gene"], где был найден любой df2 ["BaseCall"]
ОбщийЦель состоит в том, чтобы подсчитать, сколько раз каждый признак_функции был найден в гене, и захватить информацию о местоположении для использования в нисходящем направлении.
# break fasta_df sequences and mutation seqs up into kmers
data = [{"gene":"pik3ca", "start":"179148724", "stop":"179148949","seq":"TTTGCTTTATCTTTTGTTTTTGCTTTAGCTGAAGTATTTTAAAGTCAGTTACAG"},
{"gene":"brca1", "start":"179148724", "stop":"179148949","seq":"CAATATCTACCATTTGTTAACTTTGTTCTATTATCATAACTACCAAAATTAACAGA"},
{"gene":"kras1", "start":"179148724", "stop":"179148949","seq":"AAAACCCAGTAGATTTTCAAATTTTCCCAACTCTTCCACCAATGTCTTTTTACATCT"}]
# test dataframe with input seq
df1 = pd.DataFrame(data)
data2 = [{"FeatureID":"1_1_15", "BaseCall":"TTTGTT"},
{"FeatureID":"1_1_15", "BaseCall":"AATATC"},
{"FeatureID":"1_1_16", "BaseCall":"GTTTTT"},
{"FeatureID":"1_1_16", "BaseCall":"GTTCTA"},
]
df2= pd.DataFrame(data2)
Вывод должен выглядеть примерно так:
| gene | feature_id | BaseCall | Position
| pik3ca | 1_1_15 | TTTGTT | 12
| pik3ca | 1_1_16 | GTTTTT | 15
| brca1 | 1_1_16 | GTTCTA | 24
| brca1 | 1_1_15 | AATATC | 1
| brca1 | 1_1_15 | TTTGTT | 12
| brca1 | 1_1_15 | TTTGTT | 21
Эта функция ngram, кажется, прекрасно работает, когда я использую только один тестовый базовый вызов на один seq, но у меня возникают проблемы с вычислениемнаиболее эффективный способ использования метода apply с одним аргументом из двух разных фреймов данных.Или, может быть, есть еще лучший способ найти подходящие строки / позиции между двумя кадрами данных?
def ngrams(string, target):
ngrams = zip(*[string[i:] for i in range(6)])
output = [''.join(ngram)for ngram in ngrams]
indices = [(i,x) for i, x in enumerate(output) if x == target]
return indices