python打印每组前5名

2024-10-03 04:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

需要找到流行的名字,按性别分组

bnames_decade = bnames_decade.groupby(['sex','name'])['births'].sum().sort_values(ascending=False)

这表明

F    Emma        121375
     Sophia      117352
     Olivia      111691
M    Noah        110280
     Mason       105104
     Jacob       104722
F    Isabella    103947

。。。你知道吗

我想打印每个小组的前5名。 有人能推荐一个Python代码吗?你知道吗

我尝试的方法不起作用。你知道吗

bnames_top5 =bnames_decade.groupby('sex').head(5)

Tags: namefalse名字sortvaluessumgroupby性别
2条回答

一种想法是使用groupbysexname并按降序排序。然后用head执行另一个GroupBy。举个例子:

df = pd.DataFrame({'sex': ['F', 'F', 'F', 'M', 'M', 'M', 'F', 'F', 'F', 'M', 'M', 'M'],
                   'name': ['Ursula', 'Jane', 'Edith', 'Leo', 'Brian', 'Philip',
                            'Ursula', 'Edith', 'Daphne', 'Leo', 'Brian', 'George']})

df = df.groupby(['sex', 'name']).size().sort_values(ascending=False).reset_index()

res = df.groupby('sex').head(2)

print(res)

  sex    name  0
0   M     Leo  2
1   M   Brian  2
2   F  Ursula  2
3   F   Edith  2
import pandas as pd
bnames_decade = pd.DataFrame([['F','Emma',121375],['F','Sophia',117352],['F','Olivia',111691],['M','Noah',110280],['M','Mason',105104],['F','Isabella',103947], ['F','Isabella2',103946],['F','Isabella3',103945],['F','Isabella4',103944],['M','Isabella5',103943],['M','Isabella6',103942],['M','Isabella7',103941],['M','Isabella8',103940]], columns=['sex','name','births'])
print(bnames_decade)

enter image description here

for key, group in bnames_decade.groupby(['sex']):
    print(group['name'].iloc[0:5])

enter image description here

相关问题 更多 >