Search code examples
pythonlistaverageweighted-average

Weighted averaging a list


Thanks for your responses. Yes, I was looking for the weighted average.

rate = [14.424, 14.421, 14.417, 14.413, 14.41]

amount = [3058.0, 8826.0, 56705.0, 30657.0, 12984.0]

I want the weighted average of the top list based on each item of the bottom list.

So, if the first bottom-list item is small (such as 3,058 compared to the total 112,230), then the first top-list item should have less of an effect on the top-list average.

Here is some of what I have tried. It gives me an answer that looks right, but I am not sure if it follows what I am looking for.

for g in range(len(rate)):
    rate[g] = rate[g] * (amount[g] / sum(amount))
rate = sum(rate)

Solution

  • for g in range(len(rate)):
       rate[g] = rate[g] * amount[g] / sum(amount)
    rate = sum(rate)
    

    is the same as:

    sum(rate[g] * amount[g] / sum(amount) for g in range(len(rate)))
    

    which is the same as:

    sum(rate[g] * amount[g] for g in range(len(rate))) / sum(amount)
    

    which is the same as:

    sum(x * y for x, y in zip(rate, amount)) / sum(amount) 
    

    Result:

    14.415602815646439