先說結論,這篇文章會介紹到
- Pandas Apply 基本用法
前言:
剛開始我以為有 Pandas 問題可以練習一下,結果發現這是蠻單純的 apply 用法就可以解決的了,不過有點久沒使用 pandas 就來複習並寫一下小文章吧~!
我遇到的問題是這個: PTT Python 版問題
原PO針對某兩欄位與另外兩欄位做資料運算後放入結果欄位中並輸出最小的那欄數值。
解決方法:
基本上我遇到每一行都要做某件事情的問題我最直接的做法就是使用 apply function。
不過當然還有其他作法啦,像是使用 for df.rows()迴圈處理,不過這種作法速度慢太多了,我就不在這邊多做介紹啦~
因為我沒有原Po的資料也不知道原PO到底要做什麼運算比較,所以我就自己 random 出一些假資料和假運算出來示範囉!
首先一樣先引入我們會用到的套件
import numpy as np import pandas as pd
再來製作假資料
ptt.xlsx 裡面是空的,但是為了符合原PO要讀取 excel 的狀況我就多一步驟讀取囉!
df = pd.read_excel("./ptt.xlsx", header=0) df["比對A"] = np.random.randint(1, 200, (100,)) df["比對B"] = np.random.randint(1000, 2500, (100,)) df["固定A"] = np.random.randint(20, 50, (100,)) df["固定B"] = np.random.randint(1000, 1500, (100,))
接著就是使用 apply 啦!
apply 接受一個 function
這個 function 接受一個參數,而這個參數會會根據apply第二個參數 axis 而改變
所以我們設定一個 function calculate
因為我們 apply 是以 axis 1(也就是縱軸的方向做iteration的),所以第一個參數拿到的是每一列(row)的資料。
接著在裡面做運算和比較等等的操作後回傳!
回傳後直接放入 結果 的欄位中就OK啦~
def calculate(row): return row['比對A'] + row['比對B'] - row['固定A'] - row['固定B'] df["結果"] = df.apply(calculate, axis=1)
最後如果想要看最小值的話就可以用 .min() 查詢。
如果想要看最小值那一列的全部資料的話就用條件式來查找就可以啦~
print(df["結果"].min()) df[df["結果"]==df["結果"].min()]
結尾:
因為前陣子參加玉山銀行的資料分析比賽所以接觸了好一段時間的 pandas,想說就來回答一下網友的問題吧(希望有回答到啦!!!)
我相信一定有更好用或是更快的做法,如果有網友知道更好的做法的話也希望可以在留言區分享一下<(_ _)>
就這樣啦!如果有什麼問題或是有更好的做法的話都可以在下方討論喔!
或是有想說的什麼話都可以留言跟我說喔!
那就下一篇再見啦!
ㄅㄅ