资讯专栏INFORMATION COLUMN

数据分析面试题之Pandas中的groupby

ThinkSNS / 1846人阅读

摘要:昨天晚上,笔者有幸参加了一场面试,有一个环节就是现场编程题目如下示例数据如下,求每名学生对应的成绩最高的那门科目与,用实现这个题目看上去很简单,其实,并不简单。

  昨天晚上,笔者有幸参加了一场面试,有一个环节就是现场编程!题目如下:
  示例数据如下,求每名学生(ID)对应的成绩(score)最高的那门科目(class)与ID,用Python实现:

这个题目看上去很简单,其实,并不简单。即要求输出形式如下:

  当然,我们一开始能先到的是利用Pandas中的groupby,按ID做groupby,按score取最大值,可是之后的过程就难办了,是将得到的结果与原表做join,还是再想其他办法?
  怎么办?答案就是Pandas中groupby的官方文档说明,网址为:http://pandas.pydata.org/pand...。 截图如下:

本文将会用到其中的三个函数: idxmax(), idxmin(), rank().
  其实,让我们来解决一开始提出的问题,Python代码如下:

</>复制代码

  1. import pandas as pd
  2. df = pd.read_csv("E://score.csv")
  3. new_df = df.groupby("ID")["score"].idxmax()
  4. for i in new_df:
  5. print(df.iloc[i, :].tolist()[0:2])

分析代码,df.groupby("ID")["score"].idxmax()是对原数据按ID做groupby,然后取score列,用idxmax()取出成绩最好的行。然后取出这些行即可。
  当然,上述代码存在两个衍生问题:

每名学生(ID)对应的成绩(score)最低的那门科目(class)与ID;

若有学生他的某些科目的成绩是一样的,求每名学生对应的成绩最高的那些科目与ID。

  第一个问题,很好解决,在原先的代码中,将idxmax()替换为idxmin()即可,输出的结果如下:

</>复制代码

  1. [1, "C"]
  2. [2, "A"]
  3. [3, "C"]
  4. [4, "A"]

  第二个问题,如果有学生他的某些科目的成绩是一样的,如下面的示例数据:

在上面数据中,第1,3名学生的最高成绩存在重复。这是,我们需要用到rank()函数,Python代码如下:

</>复制代码

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.read_csv("E://score.csv")
  4. df["rank"] = df.groupby("ID")["score"].rank(method="min", ascending=False).astype(np.int64)
  5. #print(df)
  6. print(df[df["rank"] == 1][["ID", "class"]])

输出结果如下:

</>复制代码

  1. ID class
  2. 0 1 A
  3. 1 1 B
  4. 5 2 C
  5. 7 3 B
  6. 8 3 C
  7. 11 4 C

可以看到,我们得到的df这个数据框添加了一列rank,就是每名学生的科目的成绩排名,得到的df如下:

</>复制代码

  1. ID class score rank
  2. 0 1 A 90 1
  3. 1 1 B 90 1
  4. 2 1 C 70 3
  5. 3 2 A 60 3
  6. 4 2 B 80 2
  7. 5 2 C 100 1
  8. 6 3 A 90 3
  9. 7 3 B 100 1
  10. 8 3 C 100 1
  11. 9 4 A 70 3
  12. 10 4 B 80 2
  13. 11 4 C 90 1

然后按需要取出数据即可。

  本次分享到此结束,欢迎大家交流~~

注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42637.html

相关文章

  • ❤️仅剩20分钟挑战一道Pandas面试题⚠️生死竞速⚠️简直刺激⚡

    ?作者主页:小小明-代码实体 ?简介:Python领域优质创作者?、数据处理专家✌ ?欢迎点赞 ? 收藏 ⭐留言 ? 昨晚有位童鞋一道Pandas面试题完全没有思路不会做,通过黄同学找到我时,这道题目离提交答案仅剩20分钟,不过我最终还是在15分钟之内解决了问题,这整个过程简直是刺激~??? 原题题目如下: 最终要求输出: 要在20分钟内解决这个问题,对于我来说最困难的第一步就是理解...

    objc94 评论0 收藏0
  • python处理数据的风骚操作[pandasgroupby&agg]

    摘要:最后使用聚合函数,就得到了结果。从实现上看,返回的是一个结构,这个结构必须调用聚合函数如之后,才会得到结构为的数据结果。 介绍 每隔一段时间我都会去学习、回顾一下python中的新函数、新操作。这对于你后面的工作是有一定好处的。本文重点介绍了pandas中groupby、Grouper和agg函数的使用。这2个函数作用类似,都是对数据集中的一类属性进行聚合操作,比如统计一个用户在每个月...

    paraller 评论0 收藏0
  • 数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算

    摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...

    The question 评论0 收藏0
  • Pandas使用DataFrame进行数据分析比赛进阶之路(一)

    摘要:按照某一列的数值进行排序后输出。根据国籍这一列的属性进行分组,然后分别计算相同国籍的潜力的平均值。值得注意的是,在分组函数后面使用一个函数可以返回带有分组大小的结果。 这篇文章中使用的数据集是一个足球球员各项技能及其身价的csv表,包含了60多个字段。数据集下载链接:数据集 1、DataFrame.info() 这个函数可以输出读入表格的一些具体信息。这对于加快数据预处理非常有帮助。 ...

    yeooo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<