Python 如何计算加权平均数

Python 如何计算加权平均数,python,pandas,Python,Pandas,我想根据以下公式计算加权平均预期寿命: Country life_expectancy population Germany 70 3000000 France 75 450000 USA 70 350000 India 65 4000000 Pakistan 60 560000 Belgium

我想根据以下公式计算加权平均预期寿命:

Country  life_expectancy   population 

Germany     70               3000000
France      75               450000
USA         70               350000
India       65               4000000
Pakistan    60               560000
Belgium     68               230000

∑ (带有for循环

∑ (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
或者用熊猫做任何事情都更快更容易阅读(这是我推荐的解决方案)

使用
numpy.average(…,weights=…)

参考:

将numpy导入为np
res=np.平均值(df[“预期寿命”],权重=df[“总体”])
产出:

67.22817229336438

实际上,此处不需要for循环,您可以直接计算

life_exp = (countries_df.life_expectancy*countries_df.population).sum()/countries_df.population.sum()

答案就在这里:这里:我想用for循环实现它,我的公式也是不同的。为什么你想使用
for
循环,而不使用它可以更快地完成?谢谢你的解决方案。我还有一个问题,如果我添加另一个列大陆,那么我如何在大陆上按它分组d计算加权平均值?我试过这样做df.groupby(‘大陆’).apply(lambda x:(df[‘预期寿命’]*df[‘人口’).sum()/df[‘人口’].sum())但它给所有大陆的值都是相同的。你的lambda函数是错误的,它应该是df.groupby(‘大陆’).apply(lambda x:(x[‘预期寿命’]*x[‘人口’)).sum()/x['population'].sum())@peeps,您应该在看到最佳答案后接受它
life_exp = (countries_df.life_expectancy*countries_df.population).sum()/countries_df.population.sum()