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.
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.
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.
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= .
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.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With