Python:对列进行分组和计数

时间:2014-08-12 08:20:50

标签: python text-processing

我有一个包含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"。

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))

你可以通过一些迭代和理解使这更简洁,但我想保持这种冗长和简单,以便你理解它。