当前位置: 首页 > news >正文

python 数据分析面试题:求分组排第n名的记录数据

近期面试遇到一个面试题,分享给大家。
文中会提供详细的解题思路以及问题延伸

一、面试题

  • 面试题:输出各学科总分第一名的学员姓名、年龄、分数
  • 数据
class_a= {'name': ['学员1', '学员2', '学员3', '学员4','学员5'],'age': [23, 24, 26, 27,25],'course_subject': ['数学', '英语', '语文', '语文','数学'],'score': [100,50,40,30,99]}class_b= {'name': ['学员6', '学员7', '学员8', '学员9'],'age': [23, 24, 26, 27],'course_subject': ['数学', '数学', '语文', '英语'],'score': [18,99,77,30]}

二、解题过程

  • 字典转变为DataFrame,合并,重置索引
df_a = pd.DataFrame(class_a)
df_b = pd.DataFrame(class_b)
df = pd.concat([df_a,df_b])
df.reset_index(drop=True,inplace=True)

在这里插入图片描述

  • groupby分组 + labmda函数 得出结果

df.idxmax() :该函数作用是返回每一列中最大值的索引(所以为什么前文的数据处理中需要重置索引)。

df.groupby('course_subject').apply(lambda x: x.loc[x['score'].idxmax(), ['name', 'age', 'score']])

在这里插入图片描述

延伸:df.idxmin() 取最小

df.nlargest():返回指定列排序后的前 N 个最大值所对应的行。

df.groupby('course_subject').apply(lambda x: x.nlargest(1, 'score'))[['name','age']]

在这里插入图片描述

注意⚠️:遇到相同值的情况,返回结果可能与预期不一致,如原数据中,数学成绩=99的有两位学员,此时当n=2时,只返回其中一位学员的记录;n=3才会返回两位学员的记录数。
所以,如果某一课程中,有两位学员都获得100分,那么此方法并不能解决该面试题。
在这里插入图片描述(n=2)

df.rank():排名函数

df.groupby('course_subject').apply(lambda x:x.loc[x['score'].rank(ascending=False,method='min')==1,['name', 'age', 'score']]
)

在这里插入图片描述
说明method='min'主要是考虑遇到同值的情形,详解参考:python Pandas.rank() 排名函数详解

延伸:该方法可以延伸至求分组排名、分组排第n名的记录数据等问题,是比较完善的答案。

当然,还有其他解决方法,欢迎大家留言补充~

http://www.lryc.cn/news/109185.html

相关文章:

  • eclipse常用快捷键
  • 什么是OCR?OCR技术详解
  • 【大模型】开源且可商用的大模型通义千问-7B(Qwen-7B)来了
  • SQL分类及通用语法数据类型
  • 亿欧智库:2023中国功效型护肤产品成分解析研究报告(附下载
  • Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
  • python与深度学习(十二):CNN和猫狗大战二
  • React(1)——快速入门
  • 【论文】【生成对抗网络五】Wasserstein GAN (WGAN)
  • 学习率Learn_rate是什么(深度学习)
  • webpack基础知识五:说说Loader和Plugin的区别?编写Loader,Plugin的思路?
  • AI大模型之花,绽放在鸿蒙沃土
  • [JAVAee]锁策略
  • uni-app-使用tkiTree组件实现树形结构选择
  • SQL-每日一题【1179. 重新格式化部门表】
  • GO语言语法结构
  • C++学习——模板
  • 二叉树的遍历(先序遍历,中序遍历,后序遍历)递归与非递归算法
  • 【LeetCode】516. 最长回文子序列
  • Java 集合框架
  • 遇到多人协作,我们该用git如何应对?(版本二)
  • Flutter iOS 集成使用 fluter boost
  • node.js相关的npm包的集合
  • Android Ble蓝牙App(二)连接与发现服务
  • Android 自定义按钮(可滑动、点击)
  • mac录屏怎么打开?很简单,让我来教你!
  • Stable Diffusion AI绘画学习指南【插件安装设置】
  • APP开发中的性能优化:提升用户满意度的关键
  • Golang 切片 常用方法
  • 【Linux后端服务器开发】poll/epoll多路转接IO服务器