我有一个包含城市,名称和成员的数据框。我需要按每个城市的最高会员数(“会员”)找到前5个组(名称)。

这是我使用时得到的:

clust.groupby(['city','name']).agg({'members':sum})

memberscity nameBath AWS Bath User Group 346 Agile Bath & Bristol 957Bath Crypto Chat 47Bath JS 142Bath Machine Learning Meetup 435Belfast 4th Industrial Revolution Challenge 609Belfast Adobe Meetup 66Belfast Azure Meetup 205Southampton Crypto Currency Trading SouthCoast 50Southampton Bitcoin and Altcoin Meetup 50Southampton Functional Programming Meetup 28Southampton Virtual Reality Meetup 248Sunderland Sunderland Digital 287

我需要前5名,但正如您所看到的那样,会员人数似乎没有排序,即957年之前是346位,等等。

我还尝试过预先对值进行排序并执行以下操作:

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/

10-12 16:58