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

如何判断测试DataFrame每行是否处于训练集各列极值范围内

问题与优化方案

问题背景

现有两个Pandas DataFrame:

import pandas as pd

df_test = pd.DataFrame({
    "col1": [1, 5, 6, 5],
    "col2": [4, 5, 6, 7],
    "col3": [5, 9, 10, 11],
    "col4": [11, 10, 10, 4],
})
df_train = pd.DataFrame({
    "col1": [3, 6, 7, 4, 4],
    "col2": [5, 10, 5, 5, 5],
    "col3": [6, 8, 9, 10, 6],
    "col4": [11, 10, 8, 12, 6],
})

已通过以下代码计算得到训练集各列的极值:

df_train_minMax = df_train.agg([min, max])

结果为:

col1  col2  col3  col4
min     3     5     6     6
max     7    10    10    12

需求:

  1. 判断测试集每行所有值是否都处于训练集对应列的[min, max]区间内,生成布尔值列表(全合规为True,否则为False)
  2. 记录所有不符合条件的位置索引(行、列)

原实现代码存在无法动态匹配各列极值、逻辑冗余的问题,需优化。

优化实现方案

利用Pandas的矢量化操作可以高效完成需求,无需手动循环:

完整代码

import pandas as pd

# 创建数据集
df_test = pd.DataFrame({
    "col1": [1, 5, 6, 5],
    "col2": [4, 5, 6, 7],
    "col3": [5, 9, 10, 11],
    "col4": [11, 10, 10, 4],
})
df_train = pd.DataFrame({
    "col1": [3, 6, 7, 4, 4],
    "col2": [5, 10, 5, 5, 5],
    "col3": [6, 8, 9, 10, 6],
    "col4": [11, 10, 8, 12, 6],
})

# 计算训练集各列极值
df_train_minMax = df_train.agg([min, max])
# 提取最小、最大值Series
train_min = df_train_minMax.loc['min']
train_max = df_train_minMax.loc['max']

# 生成每个元素是否在区间内的布尔矩阵
mask = (df_test >= train_min) & (df_test <= train_max)

# 生成每行的合规判断结果列表
row_valid = mask.all(axis=1).tolist()

# 提取所有不合规的位置索引(行号、列号)
invalid_indices = [(idx, df_test.columns.get_loc(col)) 
                   for idx, col in mask.stack()[~mask.stack()].index]

print(row_valid)
print(invalid_indices)

代码说明

  1. 动态匹配极值:直接从df_train_minMax中取出min和max对应的Series,自动按列名匹配测试集,无需手动传入参数
  2. 矢量化比较:一次性生成测试集所有元素的合规性布尔矩阵,效率远高于嵌套循环
  3. 行级合规判断:mask.all(axis=1)判断每行是否所有元素都合规,转成列表即为需求的布尔结果
  4. 提取不合规索引:
    • mask.stack()将二维矩阵转为Series,索引变为(行号, 列名)的多级索引
    • ~mask.stack()筛选出所有不合规的元素
    • 通过df_test.columns.get_loc(col)将列名转为列编号,得到数字格式的(行,列)索引对

输出结果

[False, True, True, False]
[(0, 0), (0, 1), (0, 3), (3, 2), (3, 3)]

与预期完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:45:48