如何通过另一个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
相关产品推荐
相关产品推荐

