使用Pandas提取各学科对应学生总数最高的州及人数的实现方法
实现步骤&代码
你之前计算错误大概率是误用了count方法:count是统计非空行数,你需要的是对「学生人数」列执行sum求和。完整实现流程如下:
第一步:按学科、州分组,计算每个学科下对应各州的总学生人数
import pandas as pd # 按Field、Place两个字段分组,对学生人数求和,as_index=False避免分组键变成索引 field_place_total = df.groupby(['Field', 'Place'], as_index=False)['学生人数'].sum() # 可重命名求和后的列名方便识别,非必须操作 field_place_total = field_place_total.rename(columns={'学生人数': '总学生人数'})
第二步:筛选每个学科下总学生人数最高的州,有两种常用实现方案
- 方案1:
groupby+idxmax(代码简洁,适合不需要保留并列最高的场景)
# 按Field分组,取每组总学生人数最大值对应的行索引 max_idx = field_place_total.groupby('Field')['总学生人数'].idxmax() # 提取对应行,保留需要的三列 result = field_place_total.loc[max_idx, ['Field', 'Place', '总学生人数']]
如果某个学科存在多个州总人数并列最高,该方法只会返回第一个出现的州。
- 方案2:
groupby+transform(适合需要保留所有并列最高的场景)
# 新增列存储每个学科的最高总人数 field_place_total['学科最高人数'] = field_place_total.groupby('Field')['总学生人数'].transform('max') # 过滤出总人数等于学科最高人数的行,再提取目标列 result = field_place_total[field_place_total['总学生人数'] == field_place_total['学科最高人数']][['Field', 'Place', '总学生人数']]
如果某个学科存在多个州总人数并列最高,该方法会返回所有符合条件的州。
最终输出的result即为你需要的三列结果。
内容的提问来源于stack exchange,提问作者007081
相关产品推荐
相关产品推荐

