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

如何基于另一个DataFrame的单行数据查询筛选Python DataFrame

错误原因

你原来的查询代码出错有几个核心问题:

  • pandas的query()方法不支持自定义的within range语法,范围匹配需要用绝对值差值小于阈值的逻辑实现
  • 引用外部DataFrame(df2)的变量需要加@前缀,不能直接写g.0['NIY']这类非标准语法
  • 存在引号嵌套冲突、字段名大小写错误(你写的Purchase_price和实际字段名Purchase_Price不一致)、数字带千位逗号的语法问题

正确实现代码

方案1:使用query方法实现

先提取df2的基准值,再通过@引用外部变量完成筛选:

# 提取df2首行的基准值
target_niy = df2['NIY'].iloc[0]
target_price = df2['Purchase_Price'].iloc[0]

# 差值在阈值以内等价于 abs(当前值 - 基准值) ≤ 阈值
# 如果你实际需求的NIY差值阈值是代码里写的0.01,把下方的0.1替换为0.01即可
filtered_df = df1.query('abs(NIY - @target_niy) <= 0.1 and abs(Purchase_Price - @target_price) <= 2000000')

方案2:直接使用布尔索引(可读性更高,无引号嵌套坑)

target_niy = df2['NIY'].iloc[0]
target_price = df2['Purchase_Price'].iloc[0]

# 构造筛选掩码
mask = (abs(df1['NIY'] - target_niy) <= 0.1) & (abs(df1['Purchase_Price'] - target_price) <= 2000000)
filtered_df = df1[mask]

补充说明

如果你需要保留之前写的Purchase_Price > 1000000 & NIY > 0.09前置筛选条件,可以直接合并到筛选逻辑中:

mask = (df1['Purchase_Price'] > 1000000) & (df1['NIY'] > 0.09) & (abs(df1['NIY'] - target_niy) <= 0.1) & (abs(df1['Purchase_Price'] - target_price) <= 2000000)
filtered_df = df1[mask]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:24:02