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

如何依据各列的最小值与最大值筛选DataFrame

按列指定区间筛选DataFrame的解决方案

针对你有一个包含4698行的DataFrame,需要按每列对应的最小最大值条件筛选行的需求,这里提供两种实用的pandas实现方法:

方法一:向量化掩码筛选(高效处理大数据量)

这种方法通过构建布尔掩码,用向量化操作处理,适合你的大数据集,执行效率更高:

首先定义每列的区间条件(你可以根据实际需求修改数值):

import pandas as pd

# 示例:键是列名,值是(最小值, 最大值)的元组
column_ranges = {
    'A': (10, 50),
    'B': (1, 10),
    'C': (10, 85),
    'D': (2, 80),
    'E': (0.8, 3.0),
    'F': (1, 9)
}

然后生成掩码并筛选:

# 初始化掩码为全True,代表所有行初始都符合条件
mask = pd.Series([True] * len(df), index=df.index)

# 遍历每个列的条件,逐步缩小符合条件的行范围
for col, (min_val, max_val) in column_ranges.items():
    # 对当前列生成"在区间内"的布尔序列,和现有掩码做逻辑与
    mask &= (df[col] >= min_val) & (df[col] <= max_val)

# 应用掩码得到筛选后的DataFrame
filtered_df = df[mask]

方法二:简洁的逐行检查(可读性优先)

如果更看重代码的简洁性和可读性,可以用apply配合all()来检查每行是否所有列都满足条件:

# 对每行应用检查:所有列都落在对应的区间内
filtered_df = df[df.apply(lambda row: all(
    min_val <= row[col] <= max_val 
    for col, (min_val, max_val) in column_ranges.items()
), axis=1)]

额外说明

  • 如果你的条件是按列顺序给出的列表(而非字典),可以先把它和列名对应起来:
    # 示例:按A-F顺序排列的区间列表
    ranges_list = [(10, 50), (1, 10), (10, 85), (2, 80), (0.8, 3.0), (1, 9)]
    column_ranges = dict(zip(df.columns, ranges_list))
    
  • 确保每个区间的最小值≤最大值,否则会筛选出空结果
  • 你的列都是数值型(),无需额外类型转换;如果有非数值列,需要先处理或排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:30:34