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

pandas如何基于两个指定条件筛选df_1中符合要求的行

问题原因

你编写的代码逻辑错误核心在于:df_2.b == 'Yes'是直接对df_2的行按位置和df_1做布尔运算,没有按a列的取值做匹配关联,两个DataFrame长度不一致、索引也没有对齐,完全无法实现你要的按a值关联判断的需求。

解决方法

方法1:先提取符合要求的a值再筛选

先把df_2中b列取值为Yes对应的a值单独提取为集合,再基于这个集合做筛选判断:

import pandas as pd

df_1 = pd.DataFrame({'a': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})
df_2 = pd.DataFrame({'a': [2, 4, 6, 8, 10], 'b': ['Yes', 'No', 'Yes', 'No', 'No']})

# 提取df_2中b为Yes的a值集合
allowed_a = set(df_2.loc[df_2['b'] == 'Yes', 'a'])
# 按规则筛选:不在df_2的a列中,或者在允许的a值集合中
df = df_1[(~df_1['a'].isin(df_2['a'])) | (df_1['a'].isin(allowed_a))]
print(df)

方法2:通过映射字典判断

构建a列到b列的映射字典,直接对df_1的每一行a值做判断:

a_b_map = df_2.set_index('a')['b'].to_dict()
df = df_1[df_1['a'].map(lambda x: a_b_map.get(x) in (None, 'Yes'))]

两种方法运行后都可以得到你预期的输出:

a
0  1
1  2
2  3
4  5
3  6
6  7
8  9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:24:07