peeps
peeps

Reputation: 53

How to compute weighted average

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

Answers (3)

siddharth
siddharth

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

Georgina Skibinski
Georgina Skibinski

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

Quinn
Quinn

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

Related Questions