我试图通过使用引用包含(日期,值)元组的排序列表的函数来查找每个月的平均值,其中日期是字符串,格式为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
答案 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]