在收到反对票后重新发布,我试着回去尝试了一些东西,但我想还没有达到目标。
带有此类数据的文件:
name count count1 count3 add1 add2
jack 70 55 31 100174766 100170715
jack 45 656 48 100174766 100174052
john 41 22 89 102268764 102267805
john 47 31 63 102268764 102267908
david 10 56 78 103361093 103368592
我需要检查两个条件并进行一项数学运算: A)哪些行/列在add1中具有重复的值(始终等于2) B)如果它们等于2,则哪一行/列在add2中具有更大的值
以杰克为例:
jack 70 55 31 100174766 100170715
jack 45 656 48 100174766 100174052
Jack有两个add1 == 2(出现两次),而100174052
更大,因此:
row1 = jack 45 656 48 100174766 100174052
row2 = jack 70 55 31 100174766 100170715
数学:
对于两行之间的每个单元格,使用以下公式进行计算:row1 /(row1+row2)
输出结果(针对Jack):
jack 0.391304348 0.922644163 0.607594937 100174766 100174052
最终期望的输出结果
name count count1 count3 add1 add2
jack 0.391304348 0.922644163 0.607594937 100174766 100174052
john 0.534090909 0.58490566 0.414473684 102268764 102267908
目前的代码:
我知道我还没有考虑哪一个add2更大,不确定在哪里以及如何处理它。
info = []
with open('file.tsv', 'r') as j:
for i,line in enumerate(j):
lines = line.strip().split('\t')
info.append(lines)
uniq = {}
for index,row in enumerate(info, start =1):
if row.count(row[4]) == 2:
key = row[4] + ':' + row[5]
if key not in uniq:
uniq[key] = row[1:3]
for k, v in sorted(uniq.iteritems()):
row1 = k,v
row2 = k,v
print 'row1: ', row1[0], '\n', 'row2: ',row2[0]
我看到的只有:
row1: 100174766:100170715
row2: 100174766:100170715
row1: 100174766:100174052
row2: 100174766:100174052
替代
row1: 100174766:100170715
row2: 100174766:100174052
add1
中是否还有其他值与“Jack”相同的值? - Patrick Artneradd1
中,不能有一个与同值的插孔。 - novicebioinforesearcher