我是Python的新手,并且正在使用Pandas。我有一个字典(seqr)和一个数据框(pmap)。该dict由MS(主要序列,例如:“ [R] .KQPPVSPGTALVGSQK。[E]”))和值(与主序列匹配高分的序列,例如:“ [K] .QPPVSPGTALVGSQK。[ E]')。我可以忽略字典的键(例如“ P17095”),因为MS在pmap中是唯一的。
print(seqr)
P17095,{'[R].KQPPVSPGTALVGSQK.[E]': {'[K].QPPVSPGTALVGSQK.[E]': 0.9361702127659575}}
P19426,{'[R].SLSEQPVVDTATATEQAKASLEGGKATK.[Q]': {'[R].SLSEQPVVDTATATEQAK.[Q]': 0.8387096774193549}}
P20152,"{'[K].LLEGEESRISLPLPTFSSLNLR.[E]': {'[R].ISLPLPTFSSLNLR.[E]': 0.8076923076923077}, '[K].LLEGEESRISLPLPTFSSLNLREPLGER.[E]': {}, '[R].LRSSVPGVR.[L]': {'[R].SSVPGVR.[L]': 0.9375}}"
P20444,{'[K].EHMMDGVTTRTFCGTPDYIAPEIIAYQPYGK.[S]': {'[KR].TFCGTPDYIAPEIIAYQPYGK.[S]': 0.8405797101449275}}
P24452,{'[R].YSPNTQVEILPQGRESPIFK.[Q]': {}}
P26369,"{'[K].EEHGGLIRSPR.[H]': {}, '[K].EEHGGLIRSPRHEK.[K]': {}}"
另一方面,数据帧是序列列表(即dict的值),其中的列包含数字(N_1,...,L_3)。
print(pmap)
,accession,sequence,phosphosite,N_1,N_2,N_3,L_1,L_2,L_3,PSMs,mc
0,P17095,[K].EPSEVPTPK.[R],T7,363.6,271.78,299.27,286.53,367.45,297.47,5,0
1,P17095,[K].QPPVSPGTALVGSQK.[E],S5,250.86,191.18,187.01,237.79,321.26,225.86,6,0
2,P17095,[K].SSQPLASK.[Q],S2,113.96,56.68,76.25,90.32,71.89,54.07,1,0
3,P17095,[R].KQPPVSPGTALVGSQK[E],S6,343.42,282.06,353.82,404.66,365.78,393.54,10,2
4,P17182,[R].SFRNPLAK.[-],S1,241.44,224.61,229.95,202.43,213.06,263.42,2,1
我想创建一个函数,其中我的字典的每个MS和值都必须与数据框匹配。然后,必须将包含MS行的列上的值加到包含匹配Value的行上的值上。
最后,应该从df中删除df中包含MS的行。
这是我一直在尝试的方法。在遇到的问题中,我不确定如何定义dic的第一个值为MS。
def fetch_mc(x):
for key, values in seqr.items():
if values in pmap:
x.query["'sequence' == 'values'"]['N_1','N_2','N_3','N_1','N_2','N_3'].sum()
return x
df['pmap5'] = df['pmap'].apply(lambda x: fetch_mc(x))
感谢您的输入:)