如何解决使用列运算符检查通过还是失败
我不确定是否可以使用operators列返回一个熊猫系列,该系列将根据其通过分数,运算符和实际值来确定某行的活动是通过还是失败。
数据集示例:
data={"ID": [1,1,2,2],"Activity": ["Quiz","Attendance","Quiz","Attendance"],"Passing Score": [80,80,"Operator": [">=","<=",">=","<="],"Actual": [79,82,3]
}
data = pd.DataFrame(data)
它是什么样的:
ID Activity Passing Score Operator Actual
1 Quiz 80 >= 79
1 Attendance 2 <= 0
2 Quiz 80 >= 82
2 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,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)
解决方法
您可以这样做:
data[['Passing Score','Operator','Actual']].astype(str).sum(axis=1).apply(eval)
但是说实话,我不会太相信这种编程。我觉得您的数据框可以通过两列来更有意义地重塑:
- Actual_quiz
- 实际出勤
然后您可以做:
data['Actual_quiz'] =< 80
以此类推。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。