iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0

進階試算表工作 Advance Excel Tasks

上篇以 Excel 中的 Filter 函數為模型,說明各種 Pandas 索引方式,這篇文章中將重點介紹一些常見的選擇和過濾任務,並說明如何在pandas中做同樣的事情。我認為Excel中最方便的功能之一是過濾器。我想幾乎在任何時候,只要拿到任何大小的Excel文件,你只要想要過濾數據,都會使用這個功能。

Selecting the Columns選擇列

現在我們已經知道瞭如何選擇數據行,那麼我們如何控制顯示哪些列,在上面的例子中,沒有明顯的方法可以做到這一點。Pandas 可以使用基於位置的索引(loc 與 iloc)來支持這種用例。關於何時使用.loc、iloc,有很多混淆之處。區別的快速總結是:

  • .loc是用於標籤索引的
  • .iloc用於基於位置的整數。

我最常使用的是.loc。主要是因為我的數據並不適合基於位置的索引。

df.loc[[True, True, False, True], ["account", "Country"]]

https://ithelp.ithome.com.tw/upload/images/20220930/20140740rYyTi2W2kY.png

這個過程可以被認為有點相當於我們上面討論的Excel的過濾器。你有一個額外的好處,就是你也可以限制你檢索的列數,而不僅僅是行數。

df.loc[df["Total Sales"] > 200, ["account", "Country"]]

https://ithelp.ithome.com.tw/upload/images/20220930/20140740H8Vju8ZEKU.png

Editing Columns 編輯列

當你使用類似的方法來更新一個或多個基於行選擇的列時,這個過程才是真正對編輯列發揮作用。舉個簡單的例子,假設我給我們的數據添加一個佣金率列。比方說,如果你賣出了 100 多個,你的費率就是 5 %。基本過程是設置一個布爾索引來選擇列,然後將值分配給費率列。

df["rate"] = 0.02  # add
df

https://ithelp.ithome.com.tw/upload/images/20220930/20140740a5iNH7UnjV.png

我們簡單做資料集計算,將使用以下規則創建一個簡單的佣金計算器。

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]
  • 所有銷售的基本佣金為2%
  • 所有襯衫的佣金為2.5%(category = Shirt)
  • 每次交易銷售超過10條腰帶可獲得4%的佣金 (category=Belt & quantity>=10)
  • 每次交易鞋類銷售>1000美元,有250元的特別獎金和4.5%佣金 (category=Shoes & price >1000)
    根據以上的條件中完成佣金計算

https://ithelp.ithome.com.tw/upload/images/20220930/201407404XOXr1TaUU.png

完成了!這種方法在 Excel 中操作起來很簡單,但它的可重複性不強。在 Excel 中還有其他方法可以完成這個任務--比如利用公式或VBA。然而,這種在 Python 中 "過濾和編輯 "的方法是很常見的,也 Pandas 基本的邏輯的說明,最後來計算佣金 (Comp)。

df["comp"] = df["commission"] * df["ext price"] + df["bonus"]
df.groupby(["sales rep"])["comp"].sum().round(2)

https://ithelp.ithome.com.tw/upload/images/20221001/20140740UHkikR3jnm.png

謝謝大家的觀看,但歷史的痕跡會持續下去

今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。


Hi'Jerry均

Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。

謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。


上一篇
Ɖ15-香料/ 快速尋找與過濾
下一篇
Ɖ17-香料/ Excel 的進階尋找過濾
系列文
先別急著學 Python | The Secret to Success in Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言