如何基于多列条件校验生成DataFrame的status状态字段
需求说明
对DataFrame不同列执行多条件校验:单行任意一项校验条件不满足时,该行status字段取值为no,同时在KPI字段标注所有未满足条件对应的指标项;所有条件全部满足时,status字段取值为yes,KPI字段留空。
校验规则
各字段判定标准如下:
cell >= 5hr >= 7erb >= 7hrab <= 2
源数据集
初始DataFrame内容参考如下:
cell|hr|erb|hrab|status| KPI 10 |8 |8 |2 |yes | 9 |7 |8 |2 |yes | 9 |8 |6 |1 |no |erab 10 |5 |8 |3 |no |hr,Hrab 10 |8 |4 |2 |no |erb 10 |8 |8 |2 |yes |
Pandas实现代码
直接逐行匹配不满足的规则即可生成目标字段,无需复杂嵌套判断:
import pandas as pd # 构造源数据 df = pd.DataFrame( [ [10, 8, 8, 2], [9, 7, 8, 2], [9, 8, 6, 1], [10, 5, 8, 3], [10, 8, 4, 2], [10, 8, 8, 2] ], columns=["cell", "hr", "erb", "hrab"] ) # 封装校验规则:(列名, 校验逻辑, 不通过时标注的KPI名称) rules = [ ("cell", lambda val: val >= 5, "cell"), ("hr", lambda val: val >= 7, "hr"), ("erb", lambda val: val >= 7, "erb"), ("hrab", lambda val: val <= 2, "hrab"), ] # 逐行收集不通过的KPI项 df["KPI"] = df.apply( lambda row: ",".join([kpi for col, check, kpi in rules if not check(row[col])]), axis=1 ) # 生成status字段 df["status"] = df["KPI"].map(lambda x: "yes" if x == "" else "no")
执行结果
运行代码后得到的结果和预期逻辑完全匹配:
cell hr erb hrab status KPI 0 10 8 8 2 yes 1 9 7 8 2 yes 2 9 8 6 1 no erb 3 10 5 8 3 no hr,hrab 4 10 8 4 2 no erb 5 10 8 8 2 yes
内容的提问来源于stack exchange,提问作者parag
相关产品推荐
相关产品推荐

