pandas - 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
解决方案
利用 -
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
推荐阅读
- javascript - 在 jquery 插件中仅更改一种选择样式
- php - CodeIgniter - 如何在没有内存泄漏的情况下选择大表中的所有行
- java - 如何使用休眠执行庞大的 sql 本机代码?
- firebase - 有没有办法使用firebase的云功能从“child_added”事件的节点获取数据?
- ruby-on-rails - 多对多关系activerecord上的聚合
- android - Android:无法解析符号 FirebaseDatabase
- python - 如何将 BeautifulSoup 标签转换为 JSON?
- php - 是否有可以根据自定义边界规则限制类导入的 PHP linter?
- php - 插入mysql数据库时如何防止小数四舍五入
- python - Python:在函数外调用类实例