我有一个名为“数据”的结构化数组,同一个条目有几个分数。为了这个问题,我将“数据”减少到以下两列。
queryid bitscore gene1 500 gene1 480 gene1 440 gene2 900 gene2 300
我想要做的是提取相同的queryid 的最高值,即bitscore 至少比最高bitscore 低10% 的任何常见条目。
例如,只有前 2 个条目“gene1”应该被保留,因为第三个条目的比特分数低于 500 的 10%。对于基因 2,只有第一个应该被保留(这个很容易)。
queryid bitscore gene1 500 gene1 480 gene2 900
当我做一个这样的循环时:
for i in range(0, lastrow-1, 1):
if data[i]['queryid'] == data[i+1]['queryid']:
if data[i+1]['bitscore'] < data[i]['bitscore']-(0.01*data[i]['bitscore']):
data[i+1]['queryid'] = 'DELETE'
data = data[data[:]['queryid'] != 'DELETE']
所有“gene1”条目将被保留,因为 440 在 480 的 10% 范围内。
我可以将最高值添加到可以保留作为参考的另一列,但我想检查你们中是否有人对此有更好的想法......