基于python

时间:2018-03-25 02:30:14

标签: python bioinformatics biopython

我有一个矩阵如下

  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,但无法正确使用它。任何人都可以帮忙!

1 个答案:

答案 0 :(得分:3)

dfgenes成为您的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