Reputation: 53
Country life_expectancy population
Germany 70 3000000
France 75 450000
USA 70 350000
India 65 4000000
Pakistan 60 560000
Belgium 68 230000
I want to calculate the weighted average life expectancy according to the formula below:
ā (ššššš Ć šššš)/ ā šššš
where ššššš = life expectancy
šššš = population
NOTE: The weighted average life expectancy is computed with the sum of the products of life expectancy by the total population of each country divided by the sum of the total population of each country
Can anyone please tell me how to solve this using for loop?
Upvotes: 1
Views: 1923
Reputation: 1
Actually for loop is not required here you can directly calculate
life_exp = (countries_df.life_expectancy*countries_df.population).sum()/countries_df.population.sum()
Upvotes: 0
Reputation: 13387
Using numpy.average(..., weights=...)
:
Ref: https://docs.scipy.org/doc/numpy/reference/generated/numpy.average.html
import numpy as np
res=np.average(df["life_expectancy"], weights=df["population"])
Outputs:
67.22817229336438
Upvotes: 3
Reputation: 91
with a for loop
numerator, denominator = 0, 0
for i in df.index:
numerator += df.loc[i, 'life_expectancy'] * df.loc[i, 'population']
denominator += df.loc[i, 'population']
weighted_average = numerator / denominator
or using pandas to do everything faster and in any easier to read way (this is my recommended solution)
weighted_average = (df['life_expectancy']*df['population']).sum() / df['population'].sum()
Upvotes: 0