如何从一行获得平均值然后从中列出一个列表

时间:2017-10-16 01:53:36

标签: python

如果我有一个csv数据,它给出两个行值:

years grades
2001  98
2001  75
2008  100
2003  57
2008  50

我有更多的价值,但我会尝试解释我想要到达的地方。

我想获得每年的平均值。例如,对于2001年,答案是(98 + 75)/(2001年的计数数,在这种情况下为2)。

 def construct_values(filing):
            """
        Parameters
    ----------


    Returns
    -------
    years: array of integers
    average_grades: array of floats
"""


  years, average_grades = [], []
    grades = []

        with open('grades.csv', 'r') as filing:
            next(filing)
            for row in file_path:
                year, grade = (s.strip() for s in row.split(','))
                years.append(year)
                grades.append(grade)


        return years, average_grades

我所做的只是获得两个年级和成绩的阵列。我不知道如何获得平均数组,然后打印出来像:

2001, 88.5555例如,如果88.555是平均值。

我不想将它们当作字典,而是我想拥有的两个数组将会一起返回。

2 个答案:

答案 0 :(得分:0)

为什么不建立一个年级密钥的成绩词典:

from collections import defaultdict
grades = defaultdict(lambda: [])

with open('grades.csv', 'r') as f:
    year, grade = (s.strip() for s in row.split(','))
    grades[year].append(grade)

然后打印平均值:

for y, g in grades:
    print('{}: {}', y, sum(g) / float(len(g)))

答案 1 :(得分:0)

您可以使用defaultdict形成一个字典,其值(grade)是一个列表,键是year,然后在字典中将等级添加到字典中的同一年data 1}}将是defaultdict(list)

defaultdict(<type 'list'>, {'2003': ['57'], '2008': ['100', '50'], '2001': ['98', '75']})

然后,你可以循环键和值来计算平均值:

from collections import defaultdict
data = defaultdict(list)
average_grade_by_year = dict()
with open('grades.csv', 'r') as filing:
    next(filing)
    for row in filing:
        year, grade = (s.strip() for s in row.split(','))
        data[year].append(grade)
    for k, v in data.items():
        average_grade_by_year[k] = float(sum(int(x) for x in v))/len(v)
print(average_grade_by_year)

average_grade_by_year将是:{'2001': 86.5, '2003': 57.0, '2008': 75.0}