gpt4 book ai didi

python - 2 个键的 MapReduce Reducer - Python

转载 作者:行者123 更新时间:2023-12-02 22:00:38 25 4
gpt4 key购买 nike

这应该很简单,我已经花了几个小时。

示例数据(名称、二进制、计数):

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列求和。注意所需输出中的“减少”。

我已经提供了一些我的代码,我正在尝试做 没有列表或字典 在 reducer 中。

"""
Reducer 将名称与它们的二进制文件一起使用,部分计数将它们相加

输入:
名称\t 二进制\t pCount

输出:
名称\t 二进制\t tCount
"""
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}')

由于某种原因,它无法正确打印。 (通过的名字很时髦)我也不确定通过所有打印的最佳方法 one_count 和 zero_count 也显示其二进制标签。

任何帮助,将不胜感激。谢谢!

最佳答案

我认为最好使用 Pandas 库。

import pandas as pd
from io import StringIO
a ="""Adam 0 1
Adam 1 1
Adam 0 1
Mike 1 1
Mike 0 1
Mike 1 1"""

text = StringIO(a)
name, binary, count = [],[],[]

for line in text.readlines():
a = line.strip().split(" ")
name.append(a[0])
binary.append(a[1])
count.append(a[2])

df = pd.DataFrame({'name': name, "binary": binary, "count": count})
df['count'] = df['count'].astype(int)
df = df.groupby(['name', 'binary'])['count'].sum().reset_index()
print(df)
name binary count
0 Adam 0 2
1 Adam 1 1
2 Mike 0 1
3 Mike 1 2

如果您的数据已经在 csv 或文本文件中。可以使用 pandas 读取。
df = pd.read_csv('path to your file')

关于python - 2 个键的 MapReduce Reducer - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com