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