如何在Python中对结构体中的元素进行分组、计数并计算总和?

这可能是一个简单的问题。我正在读取包含两列的 csv 文件:名称+值。我可以在那里有很多条目。计算每个“名称”+值总和的出现次数的最简单、最有效的方法是什么?我可以用循环自己完成它,但 Python 中可能有一些聪明的方法可以做到这一点。

例子:

adam;10000
bartek;1000
tomasz;5000
adam;1000
bartek;3000

结果:

adam;11000;2
tomasz;5000;1
bartek;4000;2


猛跑小猪
浏览 120回答 3
3回答

一只名叫tom的猫

假设您的数据位于元组列表中(并且您不/不能使用 pandas),您可以执行以下操作:people = [('adam', 10000), ('bartek', 1000),          ('tomasz', 5000), ('adam', 1000), ('bartek', 3000)]report = {}for person in people:    name, salary = person    # we initialize the counter    if name not in report:        report[name] = {'salary': 0, 'times': 0}    # then we add to it    report[name]['salary'] = report[name]['salary'] + salary    report[name]['times'] += 1然后您可以使用以下方法检索每个值:print(report)print(report['adam'])print(report['adam']['salary'])print(report['adam']['times'])

倚天杖

您可以利用csv模块来实现此目的。将文件中的数据读入字典 - 使用名称作为键并将值存储在该键下的列表中。使用collections.defaultdict最简单:写入数据文件:name = "f.txt"with open(name, "w") as f:    f.write("""adam;10000bartek;1000tomasz;5000adam;1000bartek;3000""" )过程数据文件:import csv # https://docs.python.org/3/library/csv.htmlfrom collections import defaultdict# read data into dictionaryresults = defaultdict(list)with open(name, newline='') as f:  reader = csv.reader(f, delimiter=";")  for line in reader:      if line:          results[line[0]].append(int(line[1]))print(results)# write data from dictionary to filewith open("new" + name, "w", newline="") as f:    writer = csv.writer(f, delimiter=";")    for key in results:        writer.writerow([key, sum(results[key]), len(results[key])])# read file and print itprint(open("new"+name).read())输出:# read datadefaultdict(<class 'list'>, {'adam': [10000, 1000],                              'bartek': [1000, 3000],                              'tomasz': [5000]})# written resultsadam;11000;2bartek;4000;2tomasz;5000;1

繁星coding

Pandas 是 Python 中处理数据最流行的包之一。它将允许您将 csv 数据(通过 read_csv 函数)存储到 python 对象(称为 Pandas Dataframe)中,然后对其应用多个函数。将数据放入 pandas 数据框(称为df)后,您可以执行以下操作df_result&nbsp;=&nbsp;df.groupby('name')['value'].sum().reset_index()为此,您可以按名称重新组合数据,并计算具有相同名称的每个值的总和。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python