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