懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

此係列文章收錄在公眾號中:數據大宇宙 > 數據處理 >E-pd

轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)

經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas

前言

Excel 中名聲最響的就是 vlookup 函數,當然在 Excel 函數公式中用於查找的函數家族也挺大,不過在 pandas 中這功能卻要簡單多了。今天就來看看 pandas 中任何實現 Excel 中的多列批量 vlookup 的效果


案例1:簡單匹配

一天,你收到一份數據源表如下:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 每個人每個城市的銷售額數據

接著,你需要把下圖的表格從數據源表匹配過來:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 根據名字與上方的城市名字,從表1中匹配數據

對於 Excel 來說,這需求很簡單,一個 vlookup 即可解決:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 由於剛好目標表的城市順序與源表順序一樣,因此可以這麼解決

那麼我們來看看 pandas 中怎麼實現:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 行6、7,由於現在需要姓名匹配,我們把2份數據的姓名列設置為行索引
  • 行9,簡單調用 update 方法,表示 df_tg 按照 df_src 更新值

由於 pandas 的數據表(DataFrame) 有行列索引,並且總是行列索引對齊,因此匹配數據是輕而易舉的事情。

注意:本文所有的 pandas 更新方法,都是索引更新,而非遍歷更新,因此速度非常快。別用 vlookup 的速度與其相比


懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

案例2:有缺失

有時候,目標表不是這麼"好說話":

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 這次的城市列只有2列

那麼,用 Excel 的 vlookup 就要配合 match 函數進行動態定位:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

不多講解 Excel 的做法了,因為隨著需求難度逐漸提升,公式會越來越"醜"


同樣看看 pandas 的做法:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

你可能會覺得是我貼錯了代碼,這不就是案例1的代碼嗎?

你沒看錯,這代碼只是讀取的表名不一樣而已。其他代碼一樣。很簡單吧。


懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

案例3:不存在的列

你可能會疑問:如果目標表本身就有一些數據源不存在的列,那麼更新還能順利嗎:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 目標表多了一列數據,我們當然希望更新不會影響到這一列

繼續看 pandas 的代碼:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 是的,他很智能,只會更新列名配對的那些列

案例4:多列匹配

上面的案例只是根據名字來匹配,如果需要根據多個列匹配呢?

如下一份數據源:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 顆粒為,每人每個城市的指標值

目標表如下:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 根據 姓名 與 城市 ,匹配出指標

你可能會以為這次我總要用點啥技巧了吧。pandas 沒有那麼多花俏的東西,還是那段代碼:

懂Excel輕鬆入門Python數據分析pandas(18):pandas 中的vlookup

  • 行6和7,設置 姓名 與 城市 作為行索引即可,其他代碼不變

這裡的案例只是行索引為多層索引,實際上即使是列標題為多層複合,也能用同樣的方式匹配。

多層索引及其應用,以及更多關於數據更新的高級應用,請關注我的 pandas 專欄:


總結

本文重點:

  • DataFrame.update 是更新值的好工具
  • 構造好行列索引,是關鍵

需要源碼的小夥伴請轉發本文並私信我"python"

如果希望從零開始學習 pandas ,那麼可以看看我的 pandas 專欄。


分享到:


相關文章: