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

如何高效判断验证集各列范围是否处于训练集对应列范围内?

高效验证数据集列范围是否完全包含于训练集的方法

先回顾下咱们的数据集和需求:

训练集(train):

>>> train
   A    B
0  1  300
1  5  600
2  2  450

验证集(valid):

>>> valid
      A    B
0  1500  300
1    4  600
2    2  450

需求是:对每一列判断验证集的数值范围是否完全被训练集的范围包含,即满足 max(valid[col]) <= max(train[col]) 且 min(valid[col]) >= min(train[col])。


当然有比逐列循环更优的方法!咱们可以利用pandas的向量化操作来一次性完成所有列的检查,这种方法不仅代码更简洁,运行效率也更高(尤其是数据集很大的时候)。

实现步骤

  1. 分别计算训练集和验证集每一列的最小值和最大值,用agg()方法一次性聚合统计量;
  2. 对每一列同时验证两个条件:验证集的最大值≤训练集最大值,且验证集最小值≥训练集最小值;
  3. 将结果整理成要求的DataFrame格式。

完整代码

import pandas as pd

def func(train, valid):
    # 计算训练集和验证集的min/max统计量
    train_stats = train.agg(['min', 'max'])
    valid_stats = valid.agg(['min', 'max'])
    
    # 验证条件:valid的max <= train的max 且 valid的min >= train的min
    result = (valid_stats.loc['max'] <= train_stats.loc['max']) & (valid_stats.loc['min'] >= train_stats.loc['min'])
    
    # 转换成要求的DataFrame格式
    return pd.DataFrame(result).T

运行测试:

>>> func(train, valid)
       A      B
0  False   True

为什么这方法更优?

  • 避免了手动循环,代码可读性更强;
  • 利用pandas的向量化运算,底层是优化过的C实现,比Python级别的循环快得多,尤其是当列数很多或者数据集很大时,优势更明显;
  • 逻辑清晰,统计量的计算和条件验证都可以一步到位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:10