pandas DataFrame多条件过滤统计不合格参数及对应条目数咨询
问题原因
- 范围判断规则错误:D、E的合法取值范围是100~300,异常应该是小于100或大于300,你写的
<=110、>=800完全不符合要求,匹配不到正确的异常值。 - 逻辑运算符使用错误:你用
&(与逻辑)做筛选,意味着只有某条数据的所有参数都同时异常才会被选中,你的数据集里没有这种条目,自然返回空表。
实现方案
你可以先构造每个参数的异常判断矩阵,再统计每条数据的异常数量和对应的异常参数,再按需求分类统计即可,完整可运行代码如下:
import pandas as pd # 构造原始数据 data = {'Item':['1', '2', '3', '4', '5'], 'A':[142, 11, 50, 60, 12], 'B':[55, 65, 130, 14, 69], 'C':[68, -18, 65, 16, 17], 'D':[60, 0, 150, 170, 130], 'E':[230, 200, 5, 10, 160]} df = pd.DataFrame(data) # 定义各参数的异常判断规则 abnormal_rules = { 'A': lambda x: (x < -100) | (x > 100), 'B': lambda x: (x < -100) | (x > 100), 'C': lambda x: (x < -70) | (x > 70), 'D': lambda x: (x < 100) | (x > 300), 'E': lambda x: (x < 100) | (x > 300) } # 生成异常矩阵:值为True代表对应参数异常 abnormal_matrix = pd.DataFrame({col: abnormal_rules[col](df[col]) for col in abnormal_rules.keys()}) # 为原始表增加异常数量、异常参数列 df['异常参数数量'] = abnormal_matrix.sum(axis=1) df['异常参数列表'] = abnormal_matrix.apply(lambda row: ','.join(row[row].index.tolist()), axis=1) # 统计结果 # 总不合格条目 unqualified = df[df['异常参数数量'] >= 1] # 单参数异常条目 single_abnormal = df[df['异常参数数量'] == 1] # 多参数异常条目 multi_abnormal = df[df['异常参数数量'] >= 2] # 输出统计结果 print(f"总不合格条目数:{len(unqualified)}") print(f"单参数异常条目数:{len(single_abnormal)},明细:\n{single_abnormal[['Item','异常参数列表']]}") print(f"多参数异常条目数:{len(multi_abnormal)},明细:\n{multi_abnormal[['Item','异常参数列表']]}")
输出结果说明
运行上述代码会得到和你示例需求完全一致的结果:
- 5个条目中4个不合格
- 2个条目存在多参数异常:条目1对应A、D,条目3对应B、E
- 2个条目存在单参数异常:条目2对应D,条目4对应E
内容的提问来源于stack exchange,提问作者heartbit
相关产品推荐
相关产品推荐

