簡體   English   中英

pandas groupby 計算 groupby 列的百分比

[英]pandas groupby to calculate percentage of groupby columns

我想計算 rate_death 百分比如下 - (new_deaths / population) * 100 按位置分組並匯總 new_deaths 后。

示例:對於阿富汗,rate_death 必須計算為 ((1+4+10) / 38928341) * 100 而對於阿爾巴尼亞,它必須計算為 ((0+0+1) / 2877800) * 100

以下是我嘗試但不起作用的數據和方法 -

df_data
    location    date        new_cases   new_deaths  population
0   Afghanistan 4/25/2020   70          1           38928341
1   Afghanistan 4/26/2020   112         4           38928341
2   Afghanistan 4/27/2020   68          10          38928341
3   Albania    4/25/2020    15          0           2877800
4   Albania    4/26/2020    34          0           2877800
5   Albania    4/27/2020    14          1           2877800
Data columns (total 5 columns):
 #   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 
 0   location    6 non-null      object
 1   date        6 non-null      object
 2   new_cases   6 non-null      int64 
 3   new_deaths  6 non-null      int64 
 4   population  6 non-null      int64 

方法一:

df_res = df_data[['location','new_deaths','population']].groupby(['location']).sum()
location    new_deaths  population      
Afghanistan 15          116785023
Albania     1           8633400
df_res['rate_death'] = (df_res['new_deaths'] / df_res['population'] * 100.0)
location    new_deaths  population  rate_death          
Afghanistan 15          116785023   0.000
Albania     1           8633400     0.000

我知道由於上述 groupby 的“sum”操作,人口總計兩次,但我仍然想知道為什么 rate_death 沒有按預期計算百分比,而是顯示為 0.000

方法 2:(如本文所述嘗試過 - Pandas 與 groupby 的總百分比

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
        
Afghanistan 38928341    NaN         NaN
Albania     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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM