我有一个矩阵如下
0 1 2 3 ...
A 0.1 0.2 0.3 0.1
C 0.5 0.4 0.2 0.1
G 0.6 0.4 0.8 0.3
T 0.1 0.1 0.4 0.2
数据位于数据框中,如图所示
Genes string
Gene1 ATGC
Gene2 GCTA
Gene3 ATCG
我需要编写代码来查找每个序列的分数。 seq ATGC的得分为0.1 + 0.1 + 0.8 + 0.1 = 1.1(A为0.1,因为A位于第一位置,该位置的A值为0.1,类似于沿序列长度计算(450个字母) )
输出应如下:
Genes Score
Gene1 1.1
Gene2 1.5
Gene3 0.7
我尝试过使用biopython,但无法正确使用它。任何人都可以帮忙!
答案 0 :(得分:3)
让df
和genes
成为您的DataFrame。首先,让我们将df
转换为" tall"形式:
tall = df.stack().reset_index()
tall.columns = 'letter', 'pos', 'score'
tall.pos = tall.pos.astype(int) # Need a number here, not a string!
为trall DF创建一个新的基于元组的索引:
tall.set_index(tall[['pos', 'letter']].apply(tuple, axis=1), inplace=True)
此函数将从高级DF中提取由(position,"letter")
形式的元组索引的分数,并将它们相加:
def gene2score(gene):
return tall.loc[list(enumerate(gene))]['score'].sum()
genes['string'].apply(gene2score)
#Genes
#Gene1 1.1
#Gene2 1.5
#Gene3 0.7