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

Pandas实现DataFrame按行右向首位有效值统计已验证条目数量

实现方案

实现思路

  • 首先调整TST列的顺序为从右到左(TST5到TST1),匹配从右向左遍历的规则
  • 逐行过滤空值后取第一个非空值,判断是否为合法数值
  • 再校验第一个合法数值左侧的所有非空值中是否存在无效状态,不存在则判定为已验证

代码实现

import pandas as pd

# 定义规则常量
INVALID_STATES = {'NOT_DONE', 'INCOMP', 'UNTESTED'}
VALID_NUMS = {'30', '35', '40', '45', '50'}
# 按从右到左的顺序定义TST列
TST_COLS = ['TST5', 'TST4', 'TST3', 'TST2', 'TST1']

def check_row_valid(row):
    # 过滤空值和空字符串
    non_empty_vals = []
    for val in row:
        if pd.notna(val):
            val_str = str(val).strip()
            if val_str:
                non_empty_vals.append(val_str)
    # 全为空直接返回不合法
    if not non_empty_vals:
        return False
    first_val = non_empty_vals[0]
    # 第一个非空值不是合法数值
    if first_val not in VALID_NUMS:
        return False
    # 检查左侧是否存在无效状态
    for left_val in non_empty_vals[1:]:
        if left_val in INVALID_STATES:
            return False
    return True

# 生成合法行判断列
df['is_validated'] = df[TST_COLS].apply(check_row_valid, axis=1)

# 统计结果
total_valid = df['is_validated'].sum()
group_a_valid = df[df['is_validated']]['Group'].value_counts().get('A', 0)
group_b_valid = df[df['is_validated']]['Group'].value_counts().get('B', 0)

# 打印结果
print "Number of validated items: ", total_valid
print "Number of group A validated items: ", group_a_valid
print "Number of group B validated items: ", group_b_valid

代码说明

  • 兼容Python2.7和pandas0.24.2版本语法,没有使用高版本新增API
  • 对空值和空字符串都做了兼容处理,避免原始数据中空格等异常
  • 遍历逻辑完全匹配需求中的从右向左遍历、优先取首位有效值、校验左侧无效状态的规则,运行后可直接得到预期输出结果

内容的提问来源于stack exchange,提问作者coding amat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:36:03