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

基于Pandas DataFrame自动生成规则判断函数的实现需求

问题描述

给定如下Pandas DataFrame:

import pandas as pd

rule_frame = pd.DataFrame({'PA_1' : ['A','B','A'],
                           'PA_2' : ['Low','Low','Low'],
                           'LA_1' : ['A','B','E'],
                           'LA_2' : ['Low','Low']})

需要基于该DataFrame自动生成一个规则判断函数:

  • 函数以DataFrame的各列名作为参数
  • 当输入参数与DataFrame中任意一行的所有列值完全匹配时返回True,否则返回False
  • 实现需具备灵活性,能适配不同的列数和行数
解决方案

可以通过将规则数据预处理为元组集合,再动态生成判断函数的方式实现,同时处理原数据中的缺失值问题:

1. 通用函数生成器

def generate_rule_checker(df):
    # 获取DataFrame的列名列表
    columns = df.columns.tolist()
    # 将每行数据转为元组,把缺失值替换为None,存入集合(集合查询效率更高)
    rule_set = set(tuple(row.fillna(None) for row in df.itertuples(index=False, name=None)))
    
    def rule_checker(**kwargs):
        # 按列名顺序提取输入参数,未传入的参数默认用None对应原数据的缺失值
        input_tuple = tuple(kwargs.get(col, None) for col in columns)
        return input_tuple in rule_set
    
    return rule_checker

2. 使用示例

# 生成对应rule_frame的判断函数
check_rule = generate_rule_checker(rule_frame)

# 测试匹配场景
print(check_rule(PA_1='A', PA_2='Low', LA_1='A', LA_2='Low'))  # 输出: True(匹配第一行)
print(check_rule(PA_1='B', PA_2='Low', LA_1='B', LA_2='Low'))  # 输出: True(匹配第二行)
print(check_rule(PA_1='A', PA_2='Low', LA_1='E'))              # 输出: True(匹配第三行的缺失值,未传LA_2则默认用None)

# 测试不匹配场景
print(check_rule(PA_1='C', PA_2='Low', LA_1='A', LA_2='Low'))  # 输出: False
print(check_rule(PA_1='A', PA_2='High', LA_1='A', LA_2='Low')) # 输出: False

实现优势

  • 适配任意行列数:无论输入的DataFrame有多少列或行,生成器都能自动生成对应的判断函数
  • 处理缺失值:原数据中的缺失值会被转为None,函数调用时未传对应参数或传None都能匹配
  • 查询高效:使用集合存储规则,判断匹配的时间复杂度为O(1)

内容的提问来源于stack exchange,提问作者Samet Sökel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:27:25