Python數據分析中第二好用的函數 | apply

2021-02-20 Python數據之道

本文主要講一下Pandas中第二好用的函數——apply
為什麼說第二好用呢?做人嘛,最重要的就是謙虛,做函數也是一樣的,而apply就是這樣一個優雅而謙虛的函數。我們單獨用一篇來為apply樹碑立傳,原因有二,一是因為apply函數極其靈活高效,甚至是重新定義了pandas的靈活,一旦熟練運用,在數據清洗和分析界可謂是「屠龍在手,天下我有」;二是apply概念相對晦澀,需要結合具體案例去咀嚼和實踐。apply函數,因為她總是和分組函數一起出現,所以在江湖得了個「groupby伴侶」的稱號。她的主要作用是做聚合運算,以及在分組基礎上根據實際情況來自定義一些規則,常見用法和參數如下:如果把源數據比作麵粉,groupby分組就是把麵粉揉成一個個麵團的過程,apply起到的作用,是根據數據需求來調餡,並且把每一個麵團包成我們喜歡的包子。接下來,我們通過兩個場景,更深入的感受下apply函數的優雅迷人。背景:我們拿到了一份4位同學三次模擬考試的成績,想知道每位同學歷次模擬中最好成績和最差成績分別是多少。思路:最好和最差,分別對應著max與min,我們先按姓名分組,再用apply函數返回對應的最大和最小值,最終將結果合併。我們指定「綜合成績」列,然後把max函數直接傳入apply參數內,返回了對應分組內成績的最大值。有一些常見函數,如max、min、len等函數可以直接傳入apply。groupby分組默認會把分組依據列(姓名)變成索引,這裡用reset_index方法重置或者說取消姓名索引,將它保留在列的位置,維持DataFrame格式,方便後續匹配。得到了我們預期的結果,只是列名略醜,可以用.columns方法來賦值更改。場景一比較死板和嚴肅,場景二我們換個更接地氣的風格。背景:Boss丟過來一份省市銷售表,裡面包含省份、城市、最近1個月銷售額3個欄位,沒等你開口問需求,Boss就開腔了:「小Z啊,我最近對3這個數字有執念,我想看看每個省份銷售排名第3的都是哪些城市,以及他們的銷售額情況。對了,這個需求要儘快!」思路:問題的關鍵是找到每個省份銷售排名第3的城市,首先,應該對省份、城市按銷售額進行降序排列,然後,找到對應排名第3的城市,Emmm,如果是排名第1的城市,我們可以通過排序後去重實現,但是這個排名第3,小Z瘋狂撓頭,還是沒有什麼思路。於是弱弱的請求寬限時間:「領導,我覺得這個需求可能要花多一些時間,因為...」「我不要你覺得!我要我覺得!現在是17:00,我覺得半個小時時間已經夠充裕了!」Boss放下了手中的《明學是怎樣煉成的》,語氣斬釘截鐵又毋庸置疑。小Z在無奈和絕望之中,想起了那句詩「假如數據清洗難住了你,不要悲傷,不要心急,憂鬱的日子裡需要apply」,一瞬間通透了。數據源有省份、城市、近1月銷售額3個欄位,一共210行(銷售額)亂序排列,且都沒有空值,整體比較規整。要得到銷售排名第3的城市,要先進行排序,這裡我們用省份、近1月銷售額兩個關鍵欄位進行降序排列,得到我們期待的順序:接著,在apply函數登場前,我們先詳細剖析一下整個過程:apply的精髓,在於揉面DIY(調餡)包子。我們需要把源數據(麵粉)給揉成一個個麵團,再把一個個麵團DIY成我們想要口味的包子。其中,揉面的過程就是groupby分組,而DIY調餡做包子就是apply自定義函數和應用的過程。結合我們的目標,揉面是按省份進行分組,得到每個省各個城市和對應銷售額的麵團;DIY包子是在每個麵團中取其第三名的城市和銷售額欄位。第一步分組非常簡單,按省份分組即可。而取第3名的城市和銷售,表明我們需要城市和銷售兩個欄位,所以在分組後指明這兩列:這一步,我們已經揉好了面,原始的麵團也初步成型,雖然返回的結果有點晦澀,但是我們可以在腦海中構建一下這些麵團,截圖只展示了部分:要把這些麵團包成包子,就是要我們取出每一個麵團中,排名第3的城市。有個問題需要注意,有一些直轄市是和省並列的,而作為城市只有單獨的一行,這樣的城市我們就默認返回其本身的數據;對於非直轄市省份來說,就需要定位篩選。拿x2來舉例,要找到這個麵團中排名第三的城市和銷售額,應該怎麼做呢?答案是直接索引,把他看作是一個DataFrame格式的表,要選取第3行的所有值,包括城市和銷售額,這裡用iloc索引,很簡單的一行代碼:下面把我們針對直轄市的判斷和非直轄市的篩選邏輯整合成一個函數:這個函數,將會在apply的帶領下,對每一個分組進行批量化DIY,抽取出排名第3的城市和銷售額,應用起來很簡單:
至此,每個省份,銷售額排名第三的城市已經成功篩選出來。回顧整個操作流程,先排序,後分組,最後通過定義函數傳入apply,提取出我們的目標值。分組後數據的抽象形態,以及如何判斷和取出我們需要的值,是解決問題的關鍵和難點。

「報告老闆!篩選任務已經完成!」apply在握,小Z底氣變得格外的足。

註:數據源和詳細操作代碼,後臺回復「wb11」即可獲取。

----End----

 公眾號後臺回復「微信群」,將邀請加入讀者交流群。

相關焦點

  • Python數據分析—apply函數
    在對海量數據進行分析的過程中,我們可能要把文本型的數據處理成數值型的數據,方便放到模型中進行使用。
  • Pandas中第二好用的函數 | 優雅的apply
    本文主要講的是Pandas中第二好用的函數——apply。為什麼說第二好用呢?
  • python進程池Pool的apply與apply_async到底怎麼用?
    多進程python中使用multiprocessing模塊實現多進程。multiprocessing模塊提供了一個Process類來代表一個進程對象,這個模塊表示像線程一樣管理進程,是multiprocessing的核心,它與threading很相似,對多核CPU的利用率會比threading好的多。
  • python並發函數apply_async踩坑記錄
    筆者近期在工作中使用python的multiprocessing庫中的並發功能的時候發現:當某個自定義類中的成員變量包含multiprocessing庫中的Pool實例或Manager中的Queue,Lock等實例時,Pool.apply_async並發模塊無法接收以類方法/實例方法類型的函數進行並發。
  • Pandas 中第二好用的函數是?
    作者 | 周志鵬責編 | 劉靜這是Python數據分析實戰基礎的第四篇內容,也是基礎系列的最後一篇,接下來就進入實戰系列了。本文主要講的是Pandas中第二好用的函數——apply。為什麼說第二好用呢?做人嘛,最重要的就是謙虛,做函數也是一樣的,而apply就是這樣一個優雅而謙虛的函數。
  • 數據分析工具篇——pandas高效函數
    ,這些方法圍繞數據的查詢結果進行深入處理,在數據分析中主要做特徵處理工作。.str.split('-').strprint(df)某一列中存在固定的分隔符,我們可以採用split函數進行切分,有意思的是我們看到了python的鏈式結構。
  • R數據分析:apply()的各種變體你分清了嗎?
    apply函數可以看作是循環的替代方法,在R語言中,apply函數的變體有很多,好多時候同學搞不清到底該用apply呢,還是tapply呢還是sapply
  • R語言中的apply函數族
    前言apply函數族是R語言中數據處理的一組核心函數,通過使用apply函數,我們可以實現對數據的循環、分組、過濾、類型控制等操作
  • 乾貨 掌握R語言中的apply函數族
    目錄apply的家族函數apply函數lapply函數sapply函數vapply函數mapply函數tapply函數rapply函數eapply函數1. apply的家族函數apply函數族是R語言中數據處理的一組核心函數
  • 一文弄懂apply、map和applymap三種函數的區別
    CDA數據分析師 出品在日常處理數據的過程中,會經常遇到這樣的情況,對一個DataFrame進行逐行、逐列或者逐元素的操作,很多小夥伴也知道需要用到apply、map或者applymap,但是具體什麼情況下運用哪種方法或者說對這些方法了解不夠,用起來暈暈乎乎始終沒有很明白
  • Python高效數據分析的8個技巧
    ,這篇文章介紹了8個使用Python進行數據分析的方法,不僅能夠提升運行效率,還能夠使代碼更加「優美」。Lambda表達式用於在Python中創建小型,一次性和匿名函數對象。它能替你創建一個函數。這對繪圖時數據可視化和聲明坐標軸特別有用。
  • 【好文翻譯】R vs Python:硬碰硬的數據分析
    53.253638gs 25.571726[output truncated]這裡有一些明顯的分歧。)plt.scatter(x=plot_columns[:,0], y=plot_columns[:,1], c=labels)plt.show()在R中,我們通過聚類庫中的函數clusplot函數繪圖,使用內建函數pccomp實行PCA。
  • 8 個 Python 高效數據分析的技巧
    這篇文章介紹了 8 個使用 Python 進行數據分析的方法,不僅能夠提升運行效率,還能夠使代碼更加「優美」。定義某種列表時,寫 For 循環過於麻煩,幸運的是,Python 有一種內置的方法可以在一行代碼中解決這個問題。下面是使用 For 循環創建列表和用一行代碼創建列表的對比。
  • Pandas數據處理|apply()函數的常規用法
    本文介紹一下關於 Pandas 中 apply() 函數的幾個常見用法,apply() 函數的自由度較高,可以直接對 Series 或者 DataFrame 中元素進行逐元素遍歷操作,方便且高效,具有類似於 Numpy 的特性。
  • Python做數據分析-簡潔、易讀、強大
    由於python是一種解釋性語言,大部分編譯型語言都要比python代碼運行速度快,有些同學就因此鄙視python。但是python是一門高級語言,其生產效率更高,時間通常比CPU的時間值錢,因此為了權衡利弊,考慮用python是值得的。
  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。# 工具:python3#固定導入import numpy as np #科學計算基礎庫,多維數組對象ndarrayimport pandas as pd #數據處理庫,DataFrame(二維數組)import matplotlib as mpl #畫圖基礎庫import matplotlib.pyplot
  • 2組語法,1個函數,教你用Python做數據分析
    (點擊上方快速關注並設置為星標,一起學Python)大家好,我是大鵬,城市數據團聯合發起人,致力於Python數據分析、數據可視化的應用與教學
  • 從零開始學Python數據分析【4】-- numpy
    返回最近的整數np.rint # 判斷是否缺失np.isnan# 判斷是否有限np.isfinite# 判斷是否無限np.isinf# 冪運算np.power# 餘數np.mod統計函數# 最大值np.max# 浮點型的最大值np.fmax# 最小值np.mim# 浮點型的最小值np.fmin# 求和np.sum# 均值np.mean# 標準差
  • Python數學建模技巧之pandas數據處理
    因此,採用python去分析幾乎就成了唯一的選擇。恰好Python裡面的pandas庫提供了大數據處理分析的基本方法,是分析大型數據集的基礎武器。下面就具體講解一下pandas這個庫裡面最有用的一些函數操作。
  • Pandas高級應用(map()與apply()函數)
    一.map()函數import pandas