溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-08-10 16:45:43 來源:ITPUB博客 閱讀:163 作者:千鋒Python唐小強 欄目:編程語言

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

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

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

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

Apply初體驗

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

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

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

場景一

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

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

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

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

看一看每位同學(xué)最高成績:

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

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

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

再篩選出最低成績:

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

兩張表按姓名合并:

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

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

場景二

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI