首页 > 解决方案 > Pandas Pivot table:如何按类别对数据透视表中的前 n 个现在进行排序并生成新的数据框?

问题描述

df = pd.DataFrame({'country': ['AUD','CAD', 'IND','JPY', 'AUD', 'CHY', 'IND', 'KRL', 'SRI', 'KRW', 'CAD'], 
   'area': ['N','S','N','E','W','S','NE','N','S','SE','N'], 'gdp': [349,65,60,88,75,100,200,250,150,210,160], 'income': [7000,2300,5000,1000,550,1000,2060,2750,1450,2610,1650], 'expense': [500,300,700,600,500,900,206,275,1405,210,150]})

df = df.pivot_table(index=['country','area'],values=['gdp'],aggfunc='sum').sort_values(by = ['gdp'], ascending = False, axis = 0).head(5)

通过应用上述方法,我无法看到基于“gdp”的前 5 个“国家”。我的预期输出应该如下图所示。请建议。但是,我尝试通过 MS excel 填充预期的输出来感受一下。

new_df = country    gdp expense income
             AUD    424 1000    7550
               N    349 500     7000
               W    75  500     550
             IND    260 906      7060
               N    60  700      5000
              NE    200 206     2060
             KRL    250 275      2750
               N    250 275     2750
             CAD    225 450     3950
               N    160 150     1650
               S    65  300      2300
              KRW   210 210     2610
               SE   210 210     2610

new_df = country    gdp expense income  area
             AUD    424 1000    7550      N, W
             IND    260 906     7060      N, NE
             KRL    250 275     2750      N
             CAD    225 450     3950      N,S
             KRW    210 210     2610      SE

标签: pandaspivot-table

解决方案


利用 -

df.groupby('country', as_index=False).agg({'gdp': 'sum', 'area': ','.join}).sort_values(by='gdp', ascending=False).head(5)

输出

    country gdp area
0   AUD 349 N,W
5   KRL 250 N
6   KRW 210 SE
3   IND 200 N,NE
1   CAD 160 S,N

推荐阅读