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

如何使用pandas.groupby()识别并移除完全重复的分组?

如何移除Pandas DataFrame中整组重复的分组

这是个很实用的需求,我来帮你一步步搞定!当你按某列分组后,想要剔除那些除分组键之外,其余列数据完全一致的重复分组,下面结合你的例子给出具体解决方案:

问题重现

先还原你的原始DataFrame:

import pandas as pd

data = {
    'id': [1,1,1,2,2,2,3,3,3],
    'A': [1,2,5,1,2,5,8,4,9],
    'B': [2,3,6,2,3,6,9,0,7]
}
df = pd.DataFrame(data)

原始数据如下:

id  A  B
0   1  1  2
1   1  2  3
2   1  5  6
3   2  1  2
4   2  2  3
5   2  5  6
6   3  8  9
7   3  4  0
8   3  9  7

我们的目标是移除和分组1(id=1)完全重复的分组2(id=2),仅保留分组1和分组3。

解决方案

核心思路是给每个分组生成唯一的「特征签名」,通过判断签名是否重复来筛选出不重复的分组:

# 1. 按id分组,生成每个分组的特征签名(将A、B列的行转换为元组的元组)
group_signatures = df.groupby('id').apply(lambda x: tuple(zip(x['A'], x['B'])))

# 2. 找出所有不重复的分组对应的id
unique_group_ids = group_signatures[~group_signatures.duplicated()].index

# 3. 筛选原始DataFrame中属于唯一分组的行
result_df = df[df['id'].isin(unique_group_ids)]

结果验证

打印处理后的result_df:

print(result_df)

输出正是你想要的结果:

id  A  B
0   1  1  2
1   1  2  3
2   1  5  6
6   3  8  9
7   3  4  0
8   3  9  7

思路解释

  • 生成特征签名:用tuple(zip(x['A'], x['B']))把每个分组的A、B列数据转换成不可变的元组结构,内容完全一致的分组会生成完全相同的签名。
  • 筛选唯一分组:利用duplicated()标记重复的签名,取反后就能得到所有不重复分组的id。
  • 过滤原始数据:用isin()保留这些唯一分组的所有行,完成整组去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:14