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

如何用Pandas筛选表格中Column1和Column2组合重复的所有行?

解决Pandas中获取多列组合重复行的问题

问题场景

现有如下DataFrame df1:

import pandas as pd

data = {
    'Column1': ['cat', 'dog', 'cat', 'bird', 'cat', 'dog'],
    'Column2': ['a', 'b', 'b', 'a', 'a', 'b'],
    'Column3': [1, 4, 2, 3, 2, 3]
}
df1 = pd.DataFrame(data)

df1的内容:

Column1 Column2  Column3
0     cat       a        1
1     dog       b        4
2     cat       b        2
3     bird      a        3
4     cat       a        2
5     dog       b        3

需求是筛选出所有Column1和Column2组合重复的行,即这两列的取值组合出现过至少两次的所有行。

原代码的问题

你尝试的代码存在两个问题:

  1. 拼写错误:duplecated应为duplicated;
  2. 逻辑错误:用Column1.isin(...) & Column2.isin(...)会误判——只要Column1在某个重复组合里、且Column2也在某个重复组合里,哪怕二者的组合本身不重复,也会被筛选出来。比如行2的(cat, b)仅出现一次,但因cat出现在重复组合(cat,a)中,b出现在重复组合(dog,b)中,所以被错误纳入结果。

正确解法

方法一:直接使用duplicated(keep=False)

duplicated(keep=False)会标记所有重复的行(包括首次出现的重复行),直接基于这个布尔索引筛选即可:

df1[df1[['Column1', 'Column2']].duplicated(keep=False)]

运行后得到期望的结果:

Column1 Column2  Column3
0     cat       a        1
1     dog       b        4
4     cat       a        2
5     dog       b        3

方法二:通过分组计数筛选

先计算每个Column1+Column2组合的出现次数,再筛选次数≥2的行:

# 统计每个组合的出现次数
group_counts = df1.groupby(['Column1', 'Column2']).size().reset_index(name='count')
# 合并计数结果到原DataFrame,筛选次数≥2的行
result = df1.merge(group_counts, on=['Column1', 'Column2']).query('count >= 2').drop('count', axis=1)

此方法也能得到完全一致的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:52:54