3 回答
TA贡献1906条经验 获得超3个赞
假设您的数据位于元组列表中(并且您不/不能使用 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'])
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
TA贡献1797条经验 获得超4个赞
Pandas 是 Python 中处理数据最流行的包之一。它将允许您将 csv 数据(通过 read_csv 函数)存储到 python 对象(称为 Pandas Dataframe)中,然后对其应用多个函数。
将数据放入 pandas 数据框(称为df
)后,您可以执行以下操作
df_result = df.groupby('name')['value'].sum().reset_index()
为此,您可以按名称重新组合数据,并计算具有相同名称的每个值的总和。
添加回答
举报