我有一个包含城市、姓名和成员的数据框。我需要根据每个城市的最高成员(“成员”)计数找到前 5 个组(名称)。
这是我使用时得到的:
clust.groupby(['city','name']).agg({'members':sum})
成员
城市名
巴斯 AWS 巴斯用户组 346
雅居乐 Bath & Bristol 957
巴斯加密聊天 47
巴斯 JS 142
Bath 机器学习聚会 435
贝尔法斯特第四次工业革命挑战赛 609
贝尔法斯特 Adobe 聚会 66
贝尔法斯特 Azure 聚会 205
南安普顿加密货币交易 SouthCoast 50
南安普顿比特币和山寨币聚会 50
南安普顿函数式编程聚会 28
南安普顿虚拟现实聚会 248
桑德兰桑德兰数字 287
我需要前 5 名,但正如您所看到的,成员数量似乎没有排序,即 346 在 957 之前等。
我也尝试过预先对值进行排序并执行以下操作:
clust.sort_values(['city', 'name'], axis=0).groupby('city').head(5)
但这会返回一个类似的系列。
我也用过这个 clust.groupby(['city', 'name']).head(5)
但它给了我所有的行,而不是前 5 行。它也不是结构化的,所以不是按字母顺序排列的。
请帮忙。谢谢
最佳答案
我认为需要将 ascending=[True, False]
添加到 sort_values
并将列更改为 members
以进行排序:
clust = clust.groupby(['city','name'], as_index=False)['members'].sum()
df = clust.sort_values(['city', 'members'], ascending=[True, False]).groupby('city').head(5)
print (df)
city name members
1 Bath Agile Bath & Bristol 957
4 Bath Machine Learning Meetup 435
0 Bath AWS Bath User Group 346
3 Bath JS 142
2 Bath Crypto Chat 47
5 Belfast 4th Industrial Revolution Challenge 609
7 Belfast Azure Meetup 205
6 Belfast Adobe Meetup 66
11 Southampton Virtual Reality Meetup 248
8 Southampton Crypto Currency Trading SouthCoast 50
9 Southampton Bitcoin and Altcoin Meetup 50
10 Southampton Functional Programming Meetup 28
12 Sunderland Sunderland Digital 287
关于python - pandas 排序值以获得 groupby 中每一列的前 5 名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632059/