How to compute weighted average

断了今生、忘了曾经 提交于 2021-02-11 17:01: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?


回答1:


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



回答2:


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()



回答3:


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()


来源:https://stackoverflow.com/questions/60122005/how-to-compute-weighted-average

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!