Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

本次的 Python學習教程是關于Python數(shù)據(jù)分析實戰(zhàn)基礎相關內容,本文主要講的是Pandas中 第二好用的函數(shù)——謙虛的 apply。

創(chuàng)新互聯(lián)公司總部坐落于成都市區(qū),致力網(wǎng)站建設服務有成都做網(wǎng)站、網(wǎng)站建設、外貿營銷網(wǎng)站建設、網(wǎng)絡營銷策劃、網(wǎng)頁設計、網(wǎng)站維護、公眾號搭建、小程序開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設解決方案。創(chuàng)造真正意義上的網(wǎng)站建設,為互聯(lián)網(wǎng)品牌在互動行銷領域創(chuàng)造價值而不懈努力!

為什么說第二好用呢?那第一呢?秉承這謙虛使人進步,驕傲使人落后的品質,apply選擇做一個謙虛又優(yōu)雅的函數(shù)。

我們單獨用一篇來為apply樹碑立傳,原因有二,一是因為apply函數(shù)極其 靈活高效,甚至是重新定義了pandas的靈活,一旦熟練運用,在數(shù)據(jù)清洗和分析界可謂是“屠龍在手,天下我有”;二是apply概念 相對晦澀,需要結 合具體案例去咀嚼和實踐。附上一份 Python學習路線圖,跟著走,不會錯!

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

Apply初體驗

apply函數(shù),因為她總是和分組函數(shù)一起出現(xiàn),所以在江湖得了個“groupby伴侶”的稱號。她的主要作用是做 聚合運算,以及在分組基礎上根據(jù)實際情況來 自定義一些規(guī)則,常見用法和參數(shù)如下:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

如果把源數(shù)據(jù)比作面粉,groupby分組就是把面粉揉成一個個面團的過程,apply起到的作用,是 根據(jù)數(shù)據(jù)需求來調餡,并且把每一個面團包成我們喜歡的菜包。其實之前的Python學習教程有跟大家提過apply的相關介紹。接下來,我們通過兩個場景,更深入的感受下apply函數(shù)的優(yōu)雅迷人。

場景一

背景:我們拿到了一份4位同學三次模擬考試的成績,想知道每位同學歷次模擬中最好成績和最差成績分別是多少。

思路:最好和最差,分別對應著max與min,我們先按姓名分組,再用apply函數(shù)返回對應的最大和最小值,最終將結果合并。

先導入源數(shù)據(jù):

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

看一看每位同學最高成績:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

我們指定“綜合成績”列,然后把max函數(shù)直接傳入apply參數(shù)內,返回了對應分組內成績的最大值。有一些常見函數(shù),如max、min、len等函數(shù)可以直接傳入apply。

groupby分組默認會把分組依據(jù)列(姓名)變成索引,這里用reset_index方法重置或者說取消姓名索引,將它保留在列的位置,維持DataFrame格式,方便后續(xù)匹配。

再篩選出最低成績:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

兩張表按姓名合并:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

得到了我們預期的結果,只是列名略丑,可以用.columns方法來賦值更改。場景一比較死板和嚴肅,場景二我們換個更接地氣的風格。

場景二

背景:Boss丟過來一份省市銷售表,里面包含省份、城市、最近1個月銷售額3個字段,沒等你開口問需求,Boss就開腔了:“小Z啊,我最近對3這個數(shù)字有執(zhí)念,我想看看每個省份銷售排名第3的都是哪些城市,以及他們的銷售額情況。對了,這個需求要盡快!”

思路:問題的關鍵是 找到每個省份銷售排名第3的城市,首先,應該對省份、城市按銷售額進行降序排列,然后,找到對應排名第3的城市,Emmm,如果是排名第1的城市,我們可以通過排序后去重實現(xiàn),但是這個排名第3,小Z瘋狂撓頭,還是沒有什么思路。

于是弱弱的請求寬限時間:“領導,我覺得這個需求可能要花多一些時間,因為...”

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

“我不要你覺得!我要我覺得!現(xiàn)在是17:00,我覺得半個小時時間已經(jīng)夠充裕了!”Boss放下了手中的《明學是怎樣煉成的》,語氣斬釘截鐵又毋庸置疑。

小Z在無奈和絕望之中,想起了那句詩“假如數(shù)據(jù)清洗難住了你,不要悲傷,不要心急,憂郁的日子里需要apply”,一瞬間通透了。

說干就干,先導入數(shù)據(jù)源,對數(shù)據(jù)做個初步了解:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

數(shù)據(jù)源有省份、城市、近1月銷售額3個字段,一共210行(銷售額)亂序排列,且都沒有空值,整體比較規(guī)整。

要得到銷售排名第3的城市,要先進行排序,這里我們用省份、近1月銷售額兩個關鍵字段進行降序排列,得到我們期待的順序:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

接著,在apply函數(shù)登場前,我們先詳細剖析一下整個過程:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

apply的精髓,在于 揉面和 DIY(調餡)菜包。我們需要把源數(shù)據(jù)(面粉)給揉成一個個面團,再把一個個面團DIY成我們想要口味的菜包。其中, 揉面的過程就是groupby分組,而 DIY調餡做菜包就是apply自定義函數(shù)和應用的過程。

結合我們的目標,揉面是按省份進行分組,得到每個省各個城市和對應銷售額的面團;DIY菜包是在每個面團中取其第三名的城市和銷售額字段。

第一步分組非常簡單,按省份分組即可。而取第3名的城市和銷售,表明我們需要城市和銷售兩個字段,所以在分組后指明這兩列:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

這一步,我們已經(jīng)揉好了面,原始的面團也初步成型,雖然返回的結果有點晦澀,但是我們可以在腦海中構建一下這些面團,截圖只展示了部分:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

要把這些面團包成菜包,就是要我們取出每一個面團中,排名第3的城市。有個問題需要注意,有一些直轄市是和省并列的,而作為城市只有單獨的一行,這樣的城市我們就默認返回其本身的數(shù)據(jù);對于非直轄市省份來說,就需要定位篩選。

拿x2來舉例,要找到這個面團中排名第三的城市和銷售額,應該怎么做呢?答案是直接索引,把他看作是一個DataFrame格式的表,要選取第3行的所有值,包括城市和銷售額,這里用iloc索引,很簡單的一行代碼:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

下面把我們針對直轄市的判斷和非直轄市的篩選邏輯整合成一個函數(shù):

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

這個函數(shù),將會在apply的帶領下,對每一個分組進行批量化DIY,抽取出排名第3的城市和銷售額,應用起來很簡單:

Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)

至此,每個省份,銷售額排名第三的城市已經(jīng)成功篩選出來?;仡櫿麄€操作流程,先排序,后分組,最后通過定義函數(shù)傳入apply,提取出我們的目標值。 分組后數(shù)據(jù)的抽象形態(tài),以及如何判斷和取出我們需要的值,是解決問題的關鍵和難點。

“報告老板!篩選任務已經(jīng)完成!”apply在握,底氣十足呀!

更多的 Python學習教程也會繼續(xù)為大家更新,也希望大家學Python的時候跟著 Python學習路線圖走,有一個明確的知識體系梳理,學的時候不至于會毫無頭緒。

網(wǎng)站名稱:Python學習教程(附Python學習路線圖):Pandas中第二好用的函數(shù)
標題網(wǎng)址:http://muchs.cn/article2/piogic.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司網(wǎng)站營銷、軟件開發(fā)響應式網(wǎng)站、關鍵詞優(yōu)化做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計