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

如何通过另一个Pandas DataFrame的变量范围筛选目标DataFrame?

这是一个非常实用的多变量批量筛选需求,我帮你写一个通用的函数,完全适配你的场景,还加了容错处理避免报错:

第一步:先模拟你的数据场景

先创建包含多变量的示例数据,和你的需求对齐:

import pandas as pd

# 模拟你的主DataFrame(包含多个变量)
main_df = pd.DataFrame({
    'x': [15, 12, 25, 16, 41],
    'y': [5, 7, 2, 6, 5],  # 调整y的值方便展示筛选效果
    'z': [100, 200, 150, 300, 250]
})

# 模拟你的筛选规则DataFrame(可包含多个变量的规则)
filter_rules = pd.DataFrame({
    'Variable Name': ['x', 'y'],
    'Variable Min': [15, 4],
    'Variable Max': [20, 8]
})

第二步:编写通用筛选函数

这个函数会自动遍历所有筛选规则,把多个变量的条件合并起来,只保留同时满足所有规则的行:

def filter_dataframe(main_df, filter_rules):
    # 初始化筛选条件:默认保留所有行
    filter_condition = pd.Series([True] * len(main_df), index=main_df.index)
    
    # 逐个处理每个变量的筛选规则
    for _, rule_row in filter_rules.iterrows():
        var_name = rule_row['Variable Name']
        var_min = rule_row['Variable Min']
        var_max = rule_row['Variable Max']
        
        # 容错:如果主DataFrame里没有这个变量,跳过并提示
        if var_name not in main_df.columns:
            print(f"⚠️ 警告:主DataFrame中不存在变量 '{var_name}',已跳过该规则")
            continue
        
        # 生成当前变量的筛选条件(闭区间,包含min和max)
        current_var_condition = (main_df[var_name] >= var_min) & (main_df[var_name] <= var_max)
        
        # 合并条件:所有规则必须同时满足(逻辑与)
        filter_condition = filter_condition & current_var_condition
    
    # 返回筛选后的结果
    return main_df[filter_condition]

第三步:测试函数效果

调用函数并查看结果:

filtered_result = filter_dataframe(main_df, filter_rules)
print(filtered_result)

输出结果:

x  y    z
0  15  5  100
3  16  6  300

小提示

如果你的需求是开区间筛选(比如只保留大于min且小于max的行),只需要把函数里的>=和<=改成>和<就可以了,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:29:08