这应该很简单,我已经花了几个小时在这个。
示例数据(名称、二进制、计数):
Adam 0 1
Adam 1 1
Adam 0 1
Mike 1 1
Mike 0 1
Mike 1 1
所需的示例输出(名称、二进制、计数):
Adam 0 2
Adam 1 1
Mike 0 1
Mike 1 2
每个名称都需要有自己的二进制密钥0或1。基于二进制键,对count列求和。注意所需输出中的“reduce”。
我已经提供了我的一些代码,我正在尝试做没有列表或字典在减速机。
“”“reducer将名称与其二进制文件一起使用,并且部分计数将它们相加
输入:name\t binary\t pcount
输出:名称\t二进制\t计数
"""
import re
import sys
current_name = None
zero_count, one_count = 0,0
for line in sys.stdin:
# parse the input
name, binary, count = line.split('\t')
if name == current_name:
if int(binary) == 0:
zero_count += int(count)
elif int(binary) == 1:
one_count += int(count)
else:
if current_name:
print(f'{current_name}\t{0} \t{zero_count}')
print(f'{current_name}\t{1} \t{one_count}')
current_name, binary, count = word, int(binary), int(count)
print(f'{current_name}\t{1} \t{count}')
由于某些原因,它打印不正确(通过的名字是时髦的)我也不知道最好的方式,通过所有的印刷1\u计数和0\u计数,也显示其二进制标签。
任何帮助都将不胜感激。谢谢!
2条答案
按热度按时间7rtdyuoh1#
我认为最好使用Pandas图书馆。
如果您的数据已经在csv或文本文件中。它可以用Pandas来读。
plicqrtu2#
压痕不好,处理不好。
“i”处理第一行输入没有“current\u name”的情况(它只运行一次)。
在else块中,您必须重新初始化'zero\u count'和'one\u count',并对新的'current\u name'进行计算。
我的代码的输出: