我有一个元组列表,我把它变成了一个包含数千行的数据帧,如下所示:
frag mass prot_position
0 TFDEHNAPNSNSNK 1573.675712 2
1 EPGANAIGMVAFK 1303.659458 29
2 GTIK 417.258734 2
3 SPWPSMAR 930.438172 44
4 LPAK 427.279469 29
5 NEDSFVVWEQIINSLSALK 2191.116099 17
...
我有以下规则:
def are_dif(m1, m2, ppm=10):
if abs((m1 - m2) / m1) < ppm * 0.000001:
v = False
else:
v = True
return v
所以,我只想要质量不同于其他碎片质量的碎片。我怎样才能做到“选择”?你知道吗
然后,我有一个名为“pinfo”的列表,其中包含:
d = {'id':id, 'seq':seq_code, "1HW_fit":hits_fit}
# one for each protein
# each dictionary as the position of the protein that it describes.
所以,我想把1和蛋白质对应的字典上的“hits\u fit”值相加。你知道吗
这里有一个和你要求的略有不同的东西,但它非常简单,我认为会产生类似的效果。你知道吗
使用^{} ,可以创建一个新列
在那之后,你可以做一个
groupby
的碎片对圆形的质量,并使用nunique
来计算组中的数字。筛选大小为1的组。你知道吗所以,每个箱子的碎片数是:
如果我理解正确(不确定是否正确),你可以通过分类来完成相当多的工作。不过,首先,让我调整数据,使其混合了近距离和远距离的质量值:
然后我想你可以做如下的事情来选择“好”的。首先,创建“pdiff”(百分比差异)以查看质量与最近邻居的距离:
第一行和最后一行的数据使这一点有点棘手,所以下一行将回填第一行并重复最后一行,以便下面的掩码正常工作。这在这里的示例中是有效的,但在其他情况下可能需要调整(但仅限于第一行和最后一行数据)。你知道吗
结果:
对不起,我完全不明白问题的第二部分。你知道吗
编辑添加:正如@AmiTavory答案的评论中所提到的,我认为排序方法和分组方法可以结合起来,得到比这个更简单的答案。我可能会在以后的时间尝试,但每个人都应该自由地给自己一个机会,如果有兴趣。你知道吗
另一种解决方案是创建列表的dup(如果您需要保留它以便以后进一步处理),遍历它并删除所有与规则(m1&m2)不对应的元素。你知道吗
您将得到一个包含所有唯一质量的新列表。你知道吗
只是别忘了,如果以后确实需要使用原始列表,那么就需要使用deepcopy。你知道吗
相关问题 更多 >
编程相关推荐