免费机械网站模板,珠海做网站制作,家装风格效果图大全,阿里云虚拟主机怎么做网站近期面试遇到一个面试题#xff0c;分享给大家。 文中会提供详细的解题思路以及问题延伸
一、面试题
面试题#xff1a;输出各学科总分第一名的学员姓名、年龄、分数数据#xff1a;
class_a {name: [学员1, 学员2, 学员3, 学员4,学员5],age: [23, 24, 26, 27,25],course…近期面试遇到一个面试题分享给大家。 文中会提供详细的解题思路以及问题延伸
一、面试题
面试题输出各学科总分第一名的学员姓名、年龄、分数数据
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(dropTrue,inplaceTrue)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的有两位学员此时当n2时只返回其中一位学员的记录n3才会返回两位学员的记录数。 所以如果某一课程中有两位学员都获得100分那么此方法并不能解决该面试题。 (n2)
df.rank()排名函数
df.groupby(course_subject).apply(lambda x:x.loc[x[score].rank(ascendingFalse,methodmin)1,[name, age, score]]
)说明methodmin主要是考虑遇到同值的情形详解参考python Pandas.rank() 排名函数详解
延伸该方法可以延伸至求分组排名、分组排第n名的记录数据等问题是比较完善的答案。
当然还有其他解决方法欢迎大家留言补充