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

如何在Python的where条件中传入向量?DataFrame过滤问题

解决Pandas中用另一DataFrame的列作为筛选条件的问题

嘿,刚从R转Python做数据科学&机器学习是吧?太懂这种切换工具时的小迷茫了——毕竟R和Pandas的语法逻辑确实有不少不一样的地方~你想要实现的就是用df2里的age1向量作为条件,筛选出df1中age1列匹配这些值的行,对吧?这在Pandas里其实有几种很常用的方法,我给你一步步说清楚:

方法1:用isin()实现(对应R中的%in%)

这是最直接对应你R中使用习惯的方法,Pandas里的isin()函数就是用来检查元素是否存在于目标序列中的,用法和R的%in%几乎一致:

import pandas as pd

raw_data1 = {'age1': [23,45,21],'age2': [10,20,50], 'age3':[44,55,77]}
df1 = pd.DataFrame(raw_data1, columns = ['age1','age2','age3'])
raw_data2 = {'age1': [23,45]}
df2 = pd.DataFrame(raw_data2, columns = ['age1'])

# 核心代码:筛选df1中age1在df2.age1里的行
filtered_df = df1[df1['age1'].isin(df2['age1'])]
print(filtered_df)

运行后你会得到预期的结果:

age1  age2  age3
0    23    10    44
1    45    20    55

简单解释下:df1['age1'].isin(df2['age1'])会返回一个布尔型的Series(和df1行数一致),标记每一行的age1是否在df2的age1列表里;然后用这个布尔Series作为索引,就能提取出符合条件的行。

方法2:用merge()做内连接

如果之后你需要处理更复杂的表关联场景,用merge()做内连接也是个好选择,它会只保留两个表中age1匹配的行:

filtered_df = pd.merge(df1, df2, on='age1', how='inner')
print(filtered_df)

这个方法的结果和上面完全一样,不过如果df2还有其他列,merge会自动把这些列也合并进来,适合多字段关联的场景。

小提示

  • 如果df2的age1有重复值,isin()会依然正常匹配(重复值不会影响筛选结果);但merge()会产生笛卡尔积,这时候你可能需要加上drop_duplicates()先去重df2的age1列。
  • 如果你习惯R的dplyr风格,也可以试试Pandas的query()方法,写成df1.query('age1 in @df2.age1'),语法更贴近自然语言~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:56