我不確定我是否可以使用 operators 列來返回一個 pandas 系列,它將根據它的及格分數、運算符和實際值來確定某一行的活動是通過還是失敗。數據集示例:data={"ID": [1,1,2,2], "Activity": ["Quiz", "Attendance", "Quiz", "Attendance"], "Passing Score": [80, 2, 80, 2], "Operator": [">=", "<=", ">=", "<="], "Actual": [79, 0, 82, 3] }data = pd.DataFrame(data)它看起來像什么:ID Activity Passing Score Operator Actual1 Quiz 80 >= 791 Attendance 2 <= 02 Quiz 80 >= 822 Attendance 2 <= 3我的解決方案:def score(pass_score, operator, actual): """ pass_score: pandas Series, passing Score operator: pandas Series, operator actual: pandas Series, actual Score """ the_list=[] for a,b,c in zip(pass_score, operator, actual): if b == ">=": the_list.append(c >= a) elif b == "<=": the_list.append(c <= a) mapper={True: "Pass", False: "Fail" } return pd.Series(the_list).map(mapper)data["Peformance Tag"] = score(data["Passing Score"], data["Operator"], data["Actual"])我想要實現的目標(如果可能的話,通過使用字典來縮短我的代碼):operator_map = {">=": >=, "<=": <=, }data["Peformance Tag"] = data[["Passing Score", "Operator", "Actual"]].apply(lambda x: x[0] operator_map[x[1]] x[2], axis=1)
1 回答

POPMUISE
TA貢獻1765條經驗 獲得超5個贊
你可以做:
data[['Passing Score', 'Operator', 'Actual']].astype(str).sum(axis=1).apply(eval)
但說實話,我不會太相信這種編程。我覺得你的數據框可以通過兩列以更有意義的方式重塑:
實際測驗
實際出勤率
然后你可以這樣做:
data['Actual_quiz'] =< 80
等等。
添加回答
舉報
0/150
提交
取消