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

如何以另一个DataFrame为参数,使用Pandas的.drop()方法删除指定行?

用Pandas的drop()方法实现需求的简便方案

先明确核心需求:从df1中删除所有code不在df2中,或者**code在df2中但reply不等于'yes'**的行,最终只保留code在df2中且reply为'yes'的行。

原代码的问题

你的代码存在两个关键问题:

  • 运算符优先级错误:&的优先级高于==和!=,需要给每个比较表达式单独加括号
  • 逻辑匹配错误:逐行对比df1['code']和df2['code']会因为df2的重复值导致匹配逻辑偏离需求,应该基于df2的code集合来判断归属

简便实现方案

方案一:结合布尔索引与drop()

先筛选出需要删除的行的索引,再用drop()移除:

# 获取df2中唯一的code集合
target_codes = df2['code'].unique()
# 定义要删除的行的条件:不在目标code集合,或在集合中但reply不是yes
drop_condition = ~((df1['code'].isin(target_codes)) & (df1['reply'] == 'yes'))
# 删除对应索引的行
df_new = df1.drop(df1[drop_condition].index)

方案二:先获取保留行的索引,drop反向索引

也可以先拿到需要保留的行的索引,再删除其余行:

keep_indices = df1[(df1['code'].isin(df2['code'].unique())) & (df1['reply'] == 'yes')].index
df_new = df1.drop(df1.index.difference(keep_indices))

验证结果

运行上述代码后,df_new的结果会符合预期:

code | reply
A1   | yes

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:15:33