I have a long list with some values. I want to define a function that take the list and calculates the average for every 24 values in the list, and returns the average values as a list. How do I do this? I have 8760 elements in the list, and the list returned should give 8760/24=365 elements.
hourly_temp = ['-0.8', '-0.7', '-0.3', '-0.3', '-0.8',
'-0.5', '-0.7', '-0.6', '-0.7', '-1.2', '-1.7...] #This goes on, it's 8760 elements
def daily_mean_temp(hourly_temp):
first_24_elements = hourly_temp[:24] #First 24 elements in the list
Is this correct? I get an error saying: TypeError: cannot perform reduce with flexible type
def daily_mean_temp(hourly_temp):
averages = [float(sum(myrange))/len(myrange)
for myrange in zip(*[iter(hourly_temp)]*24)]
return averages
is a pretty neat way to do it ... note that it will truncate any end variables not nicely divisible by the range size
if you need to have uneven lists at the end (ie chunk_size of 10 with a big_list of 17 would have 7 left over)
Something along these lines seems to work:
Using this
grouper
recipe, it's pretty easy (obviously, I've synthesized thetemps
list):Assuming that you want independent groups, you can use the
grouper
itertools
recipe:And then easily get the average of each
group
:Edit: given that your data appears to be a list of strings, I would suggest you convert to floats first using
map
:Assuming your values are strings, as you show above, and that you have NumPy handy, this should be fast:
And if you might have NaNs:
And if you start with proper floats: