我有一个包含13列的文件,我希望执行一些分组任务。输入如下:
A B C D E F G H I J K L M
0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 1 1
除了A列之外,分组将按如下方式完成,产生五个新列,J,K,L,M列将合并为一个,因为它是一个特殊情况。
A,B>新栏D,E>新栏目
B C Result
1 0 1
0 1 1
1 1 1
0 0 0
如果两列中的任何一列都有" 1"在它或两者中,我想把它算作1.现在我写了这个小片段,但我不知道如何继续。
from collections import Counter
with open("datagroup.txt") as inFile:
print Counter([" ".join(line.split()[::2]) for line in inFile])
*编辑*
A B&C D&E F&G H&I J,K,L,M
1 1 0 0 1 1
1 1 0 0 0 1
0 1 0 0 1 0
1 0 0 0 0 1
0 1 0 1 1 1
1 0 0 0 0 1
基本上我想要做的是排除第一列,然后比较之后的每两列直到列J,如果任一列都有" 1"现在,我想报告为" 1"即使两列都有" 1"我仍然会报告为" 1"。对于列的最后一个,即:J,K,L,M,如果我看到" 1"在四个中,应报告为" 1"。
答案 0 :(得分:1)
首先,你显然必须以某种方式迭代行,为每一行做一些事情。
其次,我不知道你要对[::2]
做什么,因为那只会给你所有偶数列,或者Counter
首先是什么,或者为什么要特别考虑计算由一堆连接列组成的字符串。
但我认为你想要的是:
with open("datagroup.txt") as inFile:
for row in inFile:
columns = row.split()
outcolumns = []
outcolumns.append(columns[0]) # A
for group in zip(columns[1:-4:2], columns[2:-4:2])+columns[-4:]:
outcolumns.append('1' if '1' in group else '0')
print(' '.join(outcolumns))
你可以通过一些迭代和理解使这更简洁,但我想保持这种冗长和简单,以便你理解它。