You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多列条件校验生成DataFrame的status状态字段

需求说明

对DataFrame不同列执行多条件校验:单行任意一项校验条件不满足时,该行status字段取值为no,同时在KPI字段标注所有未满足条件对应的指标项;所有条件全部满足时,status字段取值为yes,KPI字段留空。

校验规则

各字段判定标准如下:

  • cell >= 5
  • hr >= 7
  • erb >= 7
  • hrab <= 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:46:03