我想计算rate_death百分比,如下所示-(new_deaths/population(*100。
示例:对于阿富汗,rate_death必须计算为((1+4+10(/38928341(*100对于阿尔巴尼亚,它必须计算为((0+0+1(/2877800(*100
以下是我尝试过但没有奏效的数据和方法-
df_data
位置日期new_cases new_deaths人口0阿富汗2020年4月25日70 1 389283411阿富汗2020年4月26日112 4 389283412阿富汗2020年4月27日68 10 389283413阿尔巴尼亚2020年4月25日15 0 28778004阿尔巴尼亚2020年4月26日34 0 28778005阿尔巴尼亚2020年4月27日14 1 2877800
数据列(共5列(:#列非Null计数Dtype-----------------------------------------------0位置6非空对象1日期6非空对象2个new_cases 6个非null int643个新路径6个非空int644总体6非空int64
方法1:
df_res = df_data[['location','new_deaths','population']].groupby(['location']).sum()
location new_deaths population阿富汗15 116785023阿尔巴尼亚1 8633400
df_res['rate_death'] = (df_res['new_deaths'] / df_res['population'] * 100.0)
location new_deaths population rate_death阿富汗15 116785023 0.000阿尔巴尼亚1 8633400 0.000
我知道由于上述分组使用"求和"运算,人口正在进行两次求和,但我仍然想知道为什么rate_death没有按预期计算百分比,而是显示为0.000
方法2:
location_population = df_data.groupby(['location', 'population']).agg({'new_deaths': 'sum'})
location = df_data.groupby(['location']).agg({'population': 'mean'})
location_population.div(location, level='location') * 100
location population new_deaths population阿富汗38928341 NaN NaN阿尔巴尼亚2877800 NaN NaN
但它是以NaN的形式出现的。
如果这些方法或如何解决问题,请提供帮助。谢谢
你可以做-
df = df.groupby(['location']).agg({'new_deaths': sum, 'population': max})
df['rate_death'] = df['new_deaths'] / df['population'] * 100
结果
new_deaths population rate_death
location
Afghanistan 15 38928341 0.000039
Albania 1 2877800 0.000035