如何根据给定区间表的取值范围筛选DataFrame中的对应行
实现思路
- 第一步:先把区间表中的所有有效区间提取出来,统一存为
(起始值, 结束值)的整数元组列表,空值直接跳过 - 第二步:遍历待筛选的DataFrame的colour列,判断每个值是否至少落在一个提取好的区间内,保留符合条件的行
可运行代码示例
import pandas as pd # 1. 提取所有有效区间,如果你是从文件读取区间表,可参考后续的自动提取代码 intervals = [ (1,5), (654,678), (11,15), (88761,88776), (1211,1215), (38,47), (89,95), (1567,1578) ] # 2. 构造待筛选的DataFrame,实际使用时可替换为从csv/数据库读取的逻辑 df = pd.DataFrame({ 'Supplier': ['Abi', 'John', 'Smith', 'Tim', 'Don'], 'colour': [1, 678, 120, 1570, 87560] }) # 3. 筛选符合条件的行 filtered_df = df[df['colour'].apply(lambda x: any(start <= x <= end for start, end in intervals))] # 打印结果 print(filtered_df)
区间表自动提取代码(可选)
如果你需要从原始区间表自动生成区间列表,可使用以下逻辑:
# 假设你已经把原始区间表读取为range_df对象 range_df = pd.read_csv("你的区间表文件路径") intervals = [] # 遍历所有存储区间的列 for col in ["blue", "green", "yellow", "purple"]: # 跳过空值,拆分区间转为整数元组 for val in range_df[col].dropna(): start, end = map(int, val.split(",")) intervals.append((start, end))
运行结果
Supplier colour 0 Abi 1 1 John 678 3 Tim 1570
内容的提问来源于stack exchange,提问作者cave
相关产品推荐
相关产品推荐

