为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2023-09-12 17:55:57
这可能是一个简单的问题。我正在读取包含两列的 csv 文件:名称+值。我可以在那里有很多条目。计算每个“名称”+值总和的出现次数的最简单、最有效的方法是什么?我可以用循环自己完成它,但 Python 中可能有一些聪明的方法可以做到这一点。例子:adam;10000 bartek;1000 tomasz;5000 adam;1000 bartek;3000结果:adam;11000;2 tomasz;5000;1 bartek;4000;2
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

假设您的数据位于元组列表中(并且您不/不能使用 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'])


查看完整回答
反对 回复 2023-09-12
?
倚天杖

TA贡献1828条经验 获得超3个赞

您可以利用csv模块来实现此目的。将文件中的数据读入字典 - 使用名称作为键并将值存储在该键下的列表中。使用collections.defaultdict最简单:

写入数据文件:

name = "f.txt"

with open(name, "w") as f:

    f.write("""adam;10000

bartek;1000

tomasz;5000

adam;1000

bartek;3000""" )

过程数据文件:


import csv # https://docs.python.org/3/library/csv.html

from collections import defaultdict


# read data into dictionary

results = 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 file

with 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 it

print(open("new"+name).read())

输出:


# read data

defaultdict(<class 'list'>, {'adam': [10000, 1000], 

                             'bartek': [1000, 3000], 

                             'tomasz': [5000]})


# written results

adam;11000;2

bartek;4000;2

tomasz;5000;1


查看完整回答
反对 回复 2023-09-12
?
繁星coding

TA贡献1797条经验 获得超4个赞

Pandas 是 Python 中处理数据最流行的包之一。它将允许您将 csv 数据(通过 read_csv 函数)存储到 python 对象(称为 Pandas Dataframe)中,然后对其应用多个函数。

将数据放入 pandas 数据框(称为df)后,您可以执行以下操作

df_result = df.groupby('name')['value'].sum().reset_index()

为此,您可以按名称重新组合数据,并计算具有相同名称的每个值的总和。


查看完整回答
反对 回复 2023-09-12
  • 3 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信