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

如何移除DataFrame中A列值存在于B列单元格的行

移除A列值出现在B列任意单元格中的行

原始数据

AB
dog_bdog_k,cat_a
cat_acat
fish
bird_c
elephantbird_c

需求

删除所有A列的值存在于B列任意单元格的逗号分隔内容中的行。例如A列的cat_a出现在dog_b的B单元格里,bird_c出现在elephant的B单元格里,这两行需要移除,最终期望输出如下:

期望输出

AB
dog_bdog_k,cat_a
fish
elephantbird_c

无效代码及原因

尝试了以下代码但未生效,输出和原数据一致:

b = df['B']
df = df[~(df['A'].isin(b.values))]

问题在于这段代码是直接匹配A列值和B列的整个单元格值,而没有识别到B单元格内逗号分隔的子内容。比如cat_a并不等于任何一个B单元格的完整值,但它是某个B单元格的子项,原代码无法捕捉这种情况。

正确解决方案

先提取B列所有非空单元格中的逗号分隔值,组成一个完整集合,再用这个集合筛选A列:

方法一:分步实现

# 初始化集合存储所有B列的子值
all_b_subvalues = set()

# 遍历B列非空值,拆分后加入集合
for cell_val in df['B'].dropna():
    all_b_subvalues.update(cell_val.split(','))

# 筛选A列不在集合中的行
df = df[~df['A'].isin(all_b_subvalues)]

方法二:简洁一行式

# 拼接所有B列非空值,拆分后转成集合
all_b_subvalues = set(','.join(df['B'].dropna()).split(','))
# 过滤行
df = df[~df['A'].isin(all_b_subvalues)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:37:26