pandas groupby计算groupby列的百分比



我想计算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

最新更新