pythonliststatisticsaverageweighted-average

Weighted averaging a list


I want the weighted average of rate with items of amount serving as weights. The idea is, if an amount is small (such as 3,058 compared to the total 112,230), then its rate should have less of an effect on the average rate.

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

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

Here is 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