文科生自學(xué)Python/VBA-多條件判斷評(píng)級(jí)
Python語(yǔ)言簡(jiǎn)潔生動(dòng),特別適合文科生學(xué)習(xí)入門IT世界,用幾十行代碼就能夠做一個(gè)完整的爬蟲(chóng)腳本,開(kāi)發(fā)效率杠杠的!短時(shí)間內(nèi)即可解決工作和學(xué)習(xí)中碰到的各種棘手問(wèn)題。(本人外語(yǔ)專業(yè)畢業(yè),機(jī)緣巧合愛(ài)上編程,自學(xué)道路曲曲折折,痛并快樂(lè)!)在這里總結(jié)一下自學(xué)Python遇到的難點(diǎn)和重點(diǎn),分享碼過(guò)的代碼和要點(diǎn)總結(jié),希望能夠給初學(xué)者一點(diǎn)啟示和鼓勵(lì),同時(shí)愿意結(jié)交更多大神交流有助提升自己的水平。
之前的文章分享了如何根據(jù)成績(jī)劃分等級(jí),只涉及到了一個(gè)條件因素,今天在這里給小伙伴們分享一下多條件判斷如何處理,下面通過(guò)一個(gè)有趣的案例進(jìn)行闡述和講解:
截圖如下:
以上是一個(gè)員工考核數(shù)據(jù),需要通過(guò)”性別“和”績(jī)效考核成績(jī)“兩個(gè)字段來(lái)綜合判斷是否獲得全額年終獎(jiǎng),半額年終獎(jiǎng)或無(wú)年終獎(jiǎng),具體標(biāo)準(zhǔn)如下:
男性方面:
- 大于等于90時(shí)拿全額年終獎(jiǎng),大于等于70時(shí)拿半額年終獎(jiǎng),剩余情況則為無(wú)年終獎(jiǎng)
女性方面:
- 大于等于85時(shí)拿全額年終獎(jiǎng),大于等于60時(shí)拿半額年終獎(jiǎng),剩余情況則為無(wú)年終獎(jiǎng)
如何用Python根據(jù)以上標(biāo)準(zhǔn)生成正確的字段數(shù)據(jù)呢?接下來(lái)展示一下具體過(guò)程,其實(shí)也是涉及了上次提到的知識(shí)點(diǎn),只是略有不同:
切到指定路徑讀取和檢查數(shù)據(jù)情況:
編寫(xiě)帶兩個(gè)參數(shù)的自定義函數(shù)并用apply生成相應(yīng)字段:
具體結(jié)果如下截圖:
Python代碼如下:
- import pandas as pd
- import os
- def Set_Work_Path(x):
- try:
- os.chdir(x)
- route = os.getcwd()
- return route
- except Exception:
- print("No Result")
- work_path = r"E:\DATA\02AUG21"
- Set_Work_Path(work_path)
- data = pd.read_excel("Sample.xlsm",sheet_name="DATA-Python",header=0,index_col=None)
- print(data)
- def Get_Rate(df,x,y):
- if df[x] == "男" and df[y] >= 90:
- return "全額年終獎(jiǎng)"
- elif df[x] == "男" and df[y] >= 70:
- return "半額年終獎(jiǎng)"
- elif df[x] == "男" and df[y] < 70:
- return "無(wú)年終獎(jiǎng)"
- elif df[x] == "女" and df[y] >= 85:
- return "全額年終獎(jiǎng)"
- elif df[x] == "女" and df[y] >= 60:
- return "半額年終獎(jiǎng)"
- else:
- return "無(wú)年終獎(jiǎng)"
- data["評(píng)級(jí)"] = data.apply(Get_Rate,axis=1,args=("性別","績(jī)效考核成績(jī)"))
- print(data)
實(shí)際上有更多維度的情況可以舉一反三,即增加參數(shù)數(shù)量并套用相同方法,下面也講一下如何通過(guò)VBA在EXCEL世界里直接解決相關(guān)問(wèn)題:
編寫(xiě)自定義函數(shù)并套用直接生成相應(yīng)字段:
VBA代碼如下:
- Function JudgeRate(x, y)
- Application.ScreenUpdating = False
- If x = "男" And y >= 90 Then
- JudgeRate = "全額年終獎(jiǎng)"
- ElseIf x = "男" And y >= 70 Then
- JudgeRate = "半額年終獎(jiǎng)"
- ElseIf x = "男" And y < 70 Then
- JudgeRate = "無(wú)年終獎(jiǎng)"
- ElseIf x = "女" And y >= 85 Then
- JudgeRate = "全額年終獎(jiǎng)"
- ElseIf x = "女" And y >= 60 Then
- JudgeRate = "半額年終獎(jiǎng)"
- Else:
- JudgeRate = "無(wú)年終獎(jiǎng)"
- End If
- Application.ScreenUpdating = True
- End Function