Python学习教程(附Python学习路线图):Pandas中第二好用的函数

发布时间:2020-08-10 16:45:43 作者:千锋Python唐小强
来源:ITPUB博客 阅读:163

本次的 Python学习教程是关于Python数据分析实战基础相关内容,本文主要讲的是Pandas中 第二好用的函数——谦虚的 apply。

为什么说第二好用呢?那第一呢?秉承这谦虚使人进步,骄傲使人落后的品质,apply选择做一个谦虚又优雅的函数。

我们单独用一篇来为apply树碑立传,原因有二,一是因为apply函数极其 灵活高效,甚至是重新定义了pandas的灵活,一旦熟练运用,在数据清洗和分析界可谓是“屠龙在手,天下我有”;二是apply概念 相对晦涩,需要结 合具体案例去咀嚼和实践。附上一份 Python学习路线图,跟着走,不会错!

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

Apply初体验

apply函数,因为她总是和分组函数一起出现,所以在江湖得了个“groupby伴侣”的称号。她的主要作用是做 聚合运算,以及在分组基础上根据实际情况来 自定义一些规则,常见用法和参数如下:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

如果把源数据比作面粉,groupby分组就是把面粉揉成一个个面团的过程,apply起到的作用,是 根据数据需求来调馅,并且把每一个面团包成我们喜欢的菜包。其实之前的Python学习教程有跟大家提过apply的相关介绍。接下来,我们通过两个场景,更深入的感受下apply函数的优雅迷人。

场景一

背景:我们拿到了一份4位同学三次模拟考试的成绩,想知道每位同学历次模拟中最好成绩和最差成绩分别是多少。

思路:最好和最差,分别对应着max与min,我们先按姓名分组,再用apply函数返回对应的最大和最小值,最终将结果合并。

先导入源数据:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

看一看每位同学最高成绩:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

我们指定“综合成绩”列,然后把max函数直接传入apply参数内,返回了对应分组内成绩的最大值。有一些常见函数,如max、min、len等函数可以直接传入apply。

groupby分组默认会把分组依据列(姓名)变成索引,这里用reset_index方法重置或者说取消姓名索引,将它保留在列的位置,维持DataFrame格式,方便后续匹配。

再筛选出最低成绩:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

两张表按姓名合并:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

得到了我们预期的结果,只是列名略丑,可以用.columns方法来赋值更改。场景一比较死板和严肃,场景二我们换个更接地气的风格。

场景二

背景:Boss丢过来一份省市销售表,里面包含省份、城市、最近1个月销售额3个字段,没等你开口问需求,Boss就开腔了:“小Z啊,我最近对3这个数字有执念,我想看看每个省份销售排名第3的都是哪些城市,以及他们的销售额情况。对了,这个需求要尽快!”

思路:问题的关键是 找到每个省份销售排名第3的城市,首先,应该对省份、城市按销售额进行降序排列,然后,找到对应排名第3的城市,Emmm,如果是排名第1的城市,我们可以通过排序后去重实现,但是这个排名第3,小Z疯狂挠头,还是没有什么思路。

于是弱弱的请求宽限时间:“领导,我觉得这个需求可能要花多一些时间,因为...”

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

“我不要你觉得!我要我觉得!现在是17:00,我觉得半个小时时间已经够充裕了!”Boss放下了手中的《明学是怎样炼成的》,语气斩钉截铁又毋庸置疑。

小Z在无奈和绝望之中,想起了那句诗“假如数据清洗难住了你,不要悲伤,不要心急,忧郁的日子里需要apply”,一瞬间通透了。

说干就干,先导入数据源,对数据做个初步了解:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

数据源有省份、城市、近1月销售额3个字段,一共210行(销售额)乱序排列,且都没有空值,整体比较规整。

要得到销售排名第3的城市,要先进行排序,这里我们用省份、近1月销售额两个关键字段进行降序排列,得到我们期待的顺序:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

接着,在apply函数登场前,我们先详细剖析一下整个过程:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

apply的精髓,在于 揉面DIY(调馅)菜包。我们需要把源数据(面粉)给揉成一个个面团,再把一个个面团DIY成我们想要口味的菜包。其中, 揉面的过程就是groupby分组,而 DIY调馅做菜包就是apply自定义函数和应用的过程。

结合我们的目标,揉面是按省份进行分组,得到每个省各个城市和对应销售额的面团;DIY菜包是在每个面团中取其第三名的城市和销售额字段。

第一步分组非常简单,按省份分组即可。而取第3名的城市和销售,表明我们需要城市和销售两个字段,所以在分组后指明这两列:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

这一步,我们已经揉好了面,原始的面团也初步成型,虽然返回的结果有点晦涩,但是我们可以在脑海中构建一下这些面团,截图只展示了部分:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

要把这些面团包成菜包,就是要我们取出每一个面团中,排名第3的城市。有个问题需要注意,有一些直辖市是和省并列的,而作为城市只有单独的一行,这样的城市我们就默认返回其本身的数据;对于非直辖市省份来说,就需要定位筛选。

拿x2来举例,要找到这个面团中排名第三的城市和销售额,应该怎么做呢?答案是直接索引,把他看作是一个DataFrame格式的表,要选取第3行的所有值,包括城市和销售额,这里用iloc索引,很简单的一行代码:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

下面把我们针对直辖市的判断和非直辖市的筛选逻辑整合成一个函数:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

这个函数,将会在apply的带领下,对每一个分组进行批量化DIY,抽取出排名第3的城市和销售额,应用起来很简单:

Python学习教程(附Python学习路线图):Pandas中第二好用的函数

至此,每个省份,销售额排名第三的城市已经成功筛选出来。回顾整个操作流程,先排序,后分组,最后通过定义函数传入apply,提取出我们的目标值。 分组后数据的抽象形态,以及如何判断和取出我们需要的值,是解决问题的关键和难点。

“报告老板!筛选任务已经完成!”apply在握,底气十足呀!

更多的 Python学习教程也会继续为大家更新,也希望大家学Python的时候跟着 Python学习路线图走,有一个明确的知识体系梳理,学的时候不至于会毫无头绪。

推荐阅读:
  1. python学习之函数
  2. [学习路线图1]PHP学习路线图(初级)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

pandas 用的 python

上一篇:多年的沉寂后,SQL正在复出

下一篇:Jutoh for Mac(电子书制作软件)v2.96.14中文激活版

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》