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

如何在Pandas中用类SQL子查询筛选符合条件的车辆价值数据

解决方案:找出符合条件的Person的Car价值

嘿,作为Pandas新手,你这个问题非常典型——很多从SQL转过来的同学都会好奇怎么在Pandas里实现子查询逻辑。我来一步步给你拆解,同时对比你熟悉的SQL思路~

原始数据回顾

首先你的示例DataFrame是这样的:

import pandas as pd

df = pd.DataFrame({
    'Person': ['Adam', 'Adam', 'Cesar', 'Diana', 'Diana', 'Diana', 'Erika', 'Erika'],
    'Belonging': ['House', 'Car', 'Car', 'House', 'Car', 'Bike', 'House', 'Car'],
    'Value': [300, 10, 12, 450, 15, 2, 600, 11],
})

输出结果:

Person Belonging  Value
0   Adam    House    300
1   Adam      Car     10
2  Cesar      Car     12
3  Diana    House    450
4  Diana      Car     15
5  Diana     Bike      2
6  Erika    House    600
7  Erika      Car     11

方法1:最贴近SQL子查询的实现

你的SQL语句用IN子查询先筛选目标Person,再过滤Car记录,对应Pandas里可以用isin()方法实现完全一致的逻辑:

# 第一步:找出拥有价值超过400的House的Person列表
target_people = df[(df['Belonging'] == 'House') & (df['Value'] > 400)]['Person'].unique()

# 第二步:筛选这些Person对应的Car记录
result = df[(df['Person'].isin(target_people)) & (df['Belonging'] == 'Car')]

运行后得到你想要的结果:

Person Belonging  Value
4  Diana      Car     15
7  Erika      Car     11

方法2:用query()直接写类SQL语句

如果你更习惯SQL语法,可以用query()方法,甚至能写出几乎和SQL一模一样的子查询语句,用@引用子查询结果:

result = df.query(
    "Person in @(df[(Belonging=='House') & (Value>400)]['Person']) & Belonging=='Car'"
)

这种写法对SQL用户来说几乎零学习成本,非常直观!

方法3:Pandas风格的分组标记法

如果你想贴合Pandas的向量化操作习惯,可以用groupby+transform给每个Person标记是否符合条件,再筛选:

# 给每个Person添加标记:是否拥有价值超400的House
df['has_high_value_house'] = df.groupby('Person').apply(
    lambda x: ((x['Belonging'] == 'House') & (x['Value'] > 400)).any()
)

# 筛选符合条件的Car记录并移除标记列
result = df[(df['has_high_value_house']) & (df['Belonging'] == 'Car')].drop('has_high_value_house', axis=1)

关于Pandas的「子查询」机制

当然有!Pandas完全支持类似SQL的子查询逻辑:

  • 第一种方法的isin()就对应SQL的IN子查询;
  • query()方法允许你直接编写类SQL的查询语句,包括嵌套子查询;
  • 你也可以先创建子DataFrame(对应SQL的子查询结果),再通过merge等操作和原表关联,这也是子查询的一种实现方式。

这些方法各有优劣:第一种最贴近SQL思路,容易上手;query()语法熟悉;分组方法更适合复杂的分组条件场景。你可以根据自己的习惯选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:57:43