You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何对pandas DataFrame按年分组统计各年份Top10姓名的计数

原有代码问题梳理

  • 聚合函数误用:groupby后调用count()是统计分组内的记录条数,你需要统计姓名对应的总计数,应该对number字段调用sum()做求和聚合
  • 排序逻辑错误:sort_values的ascending=True是从小到大升序排列,要取计数最高的前10,需要设置为降序ascending=False
  • 排序结果未生效:pandas的sort_values默认不会修改原对象,要么加inplace=True参数,要么赋值给新变量接收排序后的结果
  • 分组逻辑不符合需求:你的需求是统计指定年份的前10姓名,不需要把year放进分组维度,直接提前过滤好指定年份的数据再按name分组即可

正确实现代码

单指定年份Top10统计(以2010年男性为例)

# 第一步:过滤指定年份+指定性别
target_year = 2010
target_sex = 'M'
filtered_data = allyears[(allyears['year'] == target_year) & (allyears['sex'] == target_sex)]

# 第二步:按姓名分组,对number字段求和得到总计数
name_counts = filtered_data.groupby('name')['number'].sum().reset_index()

# 第三步:按总计数降序排序,取前10条
top10_names = name_counts.sort_values('number', ascending=False).head(10)

多年份各年Top10批量统计(以2010年之后所有年份为例)

# 过滤2010年及之后的男性数据
males = allyears[(allyears['year'] > 2009) & (allyears['sex'] == 'M')]
# 按年份+姓名分组求和
year_name_counts = males.groupby(['year', 'name'])['number'].sum().reset_index()
# 按年份分组,每组内按计数降序取前10
top10_per_year = year_name_counts.groupby('year', group_keys=False).apply(
    lambda x: x.sort_values('number', ascending=False).head(10)
)

内容的提问来源于stack exchange,提问作者Satish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:06:02