Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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) 

EDIT: After comparing other responses with my code, I decided to use the zip code to keep it as short as possible.

like image 787
GShocked Avatar asked Mar 29 '15 15:03

GShocked


People also ask

How do you calculate a weighted average?

To find a weighted average, multiply each number by its weight, then add the results. If the weights don't add up to one, find the sum of all the variables multiplied by their weight, then divide by the sum of the weights.

How do I do a weighted average in Excel?

To calculate the weighted average in Excel, you must use the SUMPRODUCT and SUM functions using the following formula: =SUMPRODUCT(X:X,X:X)/SUM(X:X) This formula works by multiplying each value by its weight and combining the values. Then, you divide the SUMPRODUCT but the sum of the weights for your weighted average.

How do you find the weighted average in python?

Calculate a Weighted Average in Pandas Using NumpyThe numpy library has a function, average() , which allows us to pass in an optional argument to specify weights of values. The function will take an array into the argument a= , and another array for weights under the argument weights= .

What is weighted average with example?

For example, say an investor acquires 100 shares of a company in year one at $10, and 50 shares of the same stock in year two at $40. To get a weighted average of the price paid, the investor multiplies 100 shares by $10 for year one and 50 shares by $40 for year two, and then adds the results to get a total of $3,000.


2 Answers

You could use numpy.average to calculate weighted average.

In [13]: import numpy as np  In [14]: rate = [14.424, 14.421, 14.417, 14.413, 14.41]  In [15]: amount = [3058.0, 8826.0, 56705.0, 30657.0, 12984.0]  In [17]: weighted_avg = np.average(rate, weights=amount)  In [19]: weighted_avg Out[19]: 14.415602815646439 
like image 121
Akavall Avatar answered Sep 25 '22 00:09

Akavall


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 
like image 39
JuniorCompressor Avatar answered Sep 24 '22 00:09

JuniorCompressor