全世界的总体预期寿命是多少?(带着numpy)



https://hub.jovian.ml/wp-content/uploads/2020/09/countries.csv

我使用以上数据练习熊猫和NumPy方法。

我想找到我使用NumPy 的平均函数的总体预期寿命

np.average(countries_df["life_expectancy"], weights=countries_df["population"])

但这给了我CCD_ 1。

如何使用NumPy获得正确答案?

用下面的方法我得到了正确的答案。

(countries_df['life_expectancy']*countries_df['population']).sum() / countries_df['population'].sum()

在进行平均之前,需要删除空值:

aux_df = countries_df.dropna(subset=['life_expectancy','population'])
np.average(aux_df["life_expectancy"], weights=aux_df["population"])
>> 72.7416

你提到的第二种方法是不正确的,你需要在"life_expectancy";在做除法中的人口总和之前:

(countries_df['life_expectancy']*countries_df['population']).sum() / countries_df[~countries_df['life_expectancy'].isna()]['population'].sum()
>> 72.7416

编辑

样本数据:

+-----------------+------------+-----------------------------+
| Life Expectancy | Population | Life Expetancy * Population |
+-----------------+------------+-----------------------------+
| 70              |        500 | 35000                       |
| 71              |       1000 | 71000                       |
| nan             |       2000 | nan                         |
+-----------------+------------+-----------------------------+
Sum:                      3500   106000

使用第二种方法:106000/3500=30.28(明显不正确(

如果我们在执行计算之前删除nan行,我们会得到下表

+-----------------+------------+-----------------------------+
| Life Expectancy | Population | Life Expetancy * Population |
+-----------------+------------+-----------------------------+
|              70 |        500 | 35000                       |
|              71 |       1000 | 71000                       |
+-----------------+------------+-----------------------------+
Sum:                      1500   106000           

结果:106000/1500=70.66

如果你把一个数字乘以nan,你就会得到一个nan。当你对所有值求和时,panda只忽略nan值,并对其余值求和,不像numpy.sum那样,如果有nan,它会返回nantoo

最新更新