从包含每个月的多个条目的列表中查找每月的平均值

时间:2014-06-10 22:02:22

标签: python list function average

我试图通过使用引用包含(日期,值)元组的排序列表的函数来查找每个月的平均值,其中日期是字符串,格式为yyyy-mm-dd,值为浮点数。数据集中的第一个条目没有显示,我相信可能会有更多我不知道的错误。这是我到目前为止用Python编写的(注意,以前的函数不包括在内):

def value_avg(previous_tuple_list):
    start_month=tup_list[0][0]
    start_month1=start_month.split("/")
    start_month2=start_month1[1]
    value_total=0
    value_count=0
    value_avglist=[]
for item in tuple_list:
    value_month=tup[0]
    value_month1=value_month.split("/")
    value_month2=value_month1[1]
    value=item[1]
    if value_month2==start_month2:
        value_sum += value
        value_count += 1
    else:
        value_avg=(value_sum / value_count)
        date_no_day= item[0][:7]
        value_avg_tup=(value_avg, date_no_day)
        value_avglist.append(value_avg_tup)
        value_sum -= value_sum
        value_count -= value_count
        start_month2 = value_month2

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,为什么不创建一个字典,其中键是月份,值是该月值的列表。然后找出每个月的平均值。所以,像:

from collections import defaultdict

def value_avg(previous_tuple_list):
    months = defaultdict(list)
    for entry in previous_tuple_list:
        month = entry[0].split('-')[1]
        months[month].append(entry[1])

    averages = {month : sum(values) / len(values) for month, values in months}

我还没有对上面的代码进行过测试,但它应该会给你一个想法。然后months字典(在for语句完成后)将月份作为键,每个月的所有值作为列表中的值。最后,averages字典每个月都有一个密钥,平均值作为每个密钥的值。

要在不使用词典的情况下执行此操作:

您可以使用2个列表,每个列表包含12个元素(因为12个月),并在您浏览元组时更新它们的值。一个列表将保存每个月的值的总和(即1月将在索引0),另一个列表将保存每个月的值的数量。然后你可以得到第三个列表(averages),它将每个月的平均值放在适当的索引处:

def value_avg(previous_tuple_list):
    sums = [0] * 12
    counts = [0] * 12

    for entry in previous_tuple_list:
        month = int(entry[0].split('-')[1]) - 1 # because list indices are 0-based
        sums[months] += entry[1]
        counts[months] += 1

    averages = [sum / count for sum, count in zip(sums, counts)]

P.S。我还没有测试过上面的代码;我希望他们能指出你正确的方向。

答案 1 :(得分:-1)

有点难以理解你想要的东西,但......

如果元组按月分类,您可以这样做:

avg = []
month = 1
for x in tuples:
   if x[0].split('/')==month: 
       avg[month-1] += x[1]
 else: 
       avg[month-1] = count[month-1]/count

您还应该研究如何标记变量等。例如:" Tuple_List" ??? python中有元组和对象类型,所以这变得非常混乱。

value_month=tup[0]
value_month1=value_month.split('/')
etc.

应该只是

month1 = tup[0].split('/')[0]
month2 = tup[0].split('/')[1]