从 python 中的字典计算蛋白质组的开始和结束位置

calculate the start and the end position of a protein group from a dictionary in python

我正在使用 python 来分析和编辑我从蛋白质数据库中获得的一些信息。 有一个带有此输出的字典:

NC_018142.1_1102_ID=1_1102  (**1277003**, 1279534, 4, 'CAS-II-C 0.64')
NC_018142.1_1103_ID=1_1103  (1279648, 1280793, 4, 'CAS-II-C 0.64')
NC_018142.1_1104_ID=1_1104  (1280954, 1282252, 4, 'CAS-II-C 0.64')
NC_018142.1_1458_ID=1_1458  (1650240, 1651379, 4, 'CAS-II-C 0.64')
NC_018142.1_1459_ID=1_1459  (1651731, 1651955, 4, 'CAS-II-C 0.64')
NC_018142.1_1460_ID=1_1460  (1651976, 1652779, 4, 'CAS-II-C 0.64')
NC_018142.1_1461_ID=1_1461  (1652848, **1653054**, 4, 'CAS-II-C 0.64')

NC_018142.1_1906_ID=1_1906  (**2167100**, 2169223, 5, 'CAS-III-D 0.61')
NC_018142.1_1907_ID=1_1907  (2169220, 2171208, 5, 'CAS-III-D 0.61')
NC_018142.1_1908_ID=1_1908  (2171205, **2172977**, 5, 'CAS-III-D 0.61')

其中键显示蛋白质 ID,值的第一列显示 dna 字符串中的开始,第二列显示结束,第三列显示蛋白质组编号,最后一列显示免疫类型系统。 我想要做的是获得如下输出:

NC_018142  (1277003, 1653054, 4, 'CAS-II-C 0.64')
NC_018142  (2171205, 2172977, 5, 'CAS-III-D 0.61')

开始是 dna 字符串中的开始,结束是字符串中关于蛋白质组的最后一个位置。所以开始是从第一行开始,结束是关于蛋白质组的最后一行的结束。蛋白质组 4 的起点:1277003 和终点:1653054。 有人可以给我任何想法并帮助我如何做到这一点? 谢谢

试试这个,如果它是你要找的,让我知道,这样我就可以评论每一行在做什么

import pandas as pd

d ={'NC_018142.1_1102_ID=1_1102':('**1277003**', 1279534, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1103_ID=1_1103':(1279648, 1280793, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1104_ID=1_1104':(1280954, 1282252, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1458_ID=1_1458':(1650240, 1651379, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1459_ID=1_1459':(1651731, 1651955, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1460_ID=1_1460':(1651976, 1652779, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1461_ID=1_1461':(1652848, '**1653054**', 4, 'CAS-II-C 0.64'),

'NC_018142.1_1906_ID=1_1906':('**2167100**', 2169223, 5, 'CAS-III-D 0.61'),
'NC_018142.1_1907_ID=1_1907':(2169220, 2171208, 5, 'CAS-III-D 0.61'),
'NC_018142.1_1908_ID=1_1908':(2171205, '**2172977**', 5, 'CAS-III-D 0.61')
}


df = pd.DataFrame(d).T.reset_index()
col_names = ['proteinID', 'start', 'end', 'group', 'type']
df.columns = col_names
df['proteinID'] = df['proteinID'].str.split('.').str[0]
df['start'] = df['start'].astype(str).str.replace('*', '')
df['end'] = df['end'].astype(str).str.replace('*', '')

df = df.groupby(['proteinID', 'group']).agg({'start':'first', 'end':'last','type':'first'}).reset_index()

df = df[col_names]
df

最终结果将是一个 pandas 数据帧:

    proteinID   start   end     group   type
0   NC_018142   1277003 1653054   4     CAS-II-C 0.64
1   NC_018142   2167100 2172977   5     CAS-III-D 0.61