如何用Pandas筛选另一列值相同且指定列属特定集合的行
解决方案
核心思路
直接在原DataFrame上删除同时满足以下两个条件的行:
- B列的值存在重复(即该B值在列中出现≥2次)
- 对应行的A列值属于集合
{1,2}
步骤与代码
生成需要删除的行的布尔索引:
# 标记所有B列值重复的行 cond_b_dup = df['B'].duplicated(keep=False) # 标记A列值属于{1,2}的行 cond_a_in_set = df['A'].isin({1, 2}) # 合并条件,得到待删除行的标记 to_drop = cond_b_dup & cond_a_in_set在原DataFrame上执行删除操作(
inplace=True确保直接修改原数据):df.drop(index=df[to_drop].index, inplace=True)
示例验证结果
执行代码后,原示例DataFrame会被修改为:
A B 6 3 d
仅保留了B=d且A=3的行,其余符合删除条件的行均被移除。
通用说明
针对你实际的40列数据集,只需将代码中的A、B替换为对应列名即可,逻辑完全通用。其中duplicated(keep=False)会标记所有重复的B值行,确保重复B组内所有A符合条件的行都被删除。
内容的提问来源于stack exchange,提问作者i.i.k.
相关产品推荐
相关产品推荐

