上篇以 Excel 中的 Filter 函數為模型,說明各種 Pandas 索引方式,這篇文章中將重點介紹一些常見的選擇和過濾任務,並說明如何在pandas中做同樣的事情。我認為Excel中最方便的功能之一是過濾器。我想幾乎在任何時候,只要拿到任何大小的Excel文件,你只要想要過濾數據,都會使用這個功能。
現在我們已經知道瞭如何選擇數據行,那麼我們如何控制顯示哪些列,在上面的例子中,沒有明顯的方法可以做到這一點。Pandas 可以使用基於位置的索引(loc 與 iloc)來支持這種用例。關於何時使用.loc、iloc,有很多混淆之處。區別的快速總結是:
我最常使用的是.loc。主要是因為我的數據並不適合基於位置的索引。
df.loc[[True, True, False, True], ["account", "Country"]]
這個過程可以被認為有點相當於我們上面討論的Excel的過濾器。你有一個額外的好處,就是你也可以限制你檢索的列數,而不僅僅是行數。
df.loc[df["Total Sales"] > 200, ["account", "Country"]]
當你使用類似的方法來更新一個或多個基於行選擇的列時,這個過程才是真正對編輯列發揮作用。舉個簡單的例子,假設我給我們的數據添加一個佣金率列。比方說,如果你賣出了 100 多個,你的費率就是 5 %。基本過程是設置一個布爾索引來選擇列,然後將值分配給費率列。
df["rate"] = 0.02 # add
df
我們簡單做資料集計算,將使用以下規則創建一個簡單的佣金計算器。
df = pd.read_excel("data/reps.xlsx")
df["commission"] = .02
df["bonus"] = 0
df.loc[df["category"] == "Shirt", ["commission"]] = .025
df.loc[(df["category"] == "Belt") & (df["quantity"] >= 10), ["commission"]] = .04
df.loc[(df["category"] == "Shoes") & (df["ext price"] >= 1000 ), ["bonus", "commission"]] = 250, 0.045
# Show data
df.iloc[3:8]
完成了!這種方法在 Excel 中操作起來很簡單,但它的可重複性不強。在 Excel 中還有其他方法可以完成這個任務--比如利用公式或VBA。然而,這種在 Python 中 "過濾和編輯 "的方法是很常見的,也 Pandas 基本的邏輯的說明,最後來計算佣金 (Comp)。
df["comp"] = df["commission"] * df["ext price"] + df["bonus"]
df.groupby(["sales rep"])["comp"].sum().round(2)
今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。
Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。
謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。