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

如何在Python Pandas中找出DataFrame重复行中值不同的对应行

问题描述

现有如下Pandas DataFrame,部分ID存在重复:

IDCOL1COL2COL3
123XX111ENG
123abc111ENG
444ccc2o
444ccc2o
67a89xx

需要筛选出ID重复且其他列存在值差异的行(类似ID=123的情况),期望输出:

IDCOL1COL2COL3
123XX111ENG
123abc111ENG

要求适配多列场景,如何用Python Pandas实现?

解决方案

可以通过以下步骤实现,自动适配任意多列的情况:

步骤1:识别符合条件的ID

按ID分组后,检查每个分组内是否存在列值差异(即分组内任意一列的不同值数量大于1),提取这类ID的列表。

步骤2:筛选目标行

用提取到的ID列表,从原DataFrame中筛选对应行。

具体代码如下:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'ID': [123, 123, 444, 444, 67],
    'COL1': ['XX', 'abc', 'ccc', 'ccc', 'a'],
    'COL2': [111, 111, 2, 2, 89],
    'COL3': ['ENG', 'ENG', 'o', 'o', 'xx']
})

# 获取满足条件的ID:ID重复且分组内存在列值差异
target_ids = df.groupby('ID').filter(lambda group: group.nunique().any() > 1)['ID'].unique()

# 筛选目标行
result = df[df['ID'].isin(target_ids)]

print(result)

代码解释

  • groupby('ID').filter(lambda group: group.nunique().any() > 1):对每个ID分组,检查分组内是否有任意一列的不同值数量大于1(即存在差异),保留这类分组。
  • ['ID'].unique():提取符合条件的唯一ID列表,避免重复筛选。
  • df[df['ID'].isin(target_ids)]:从原DataFrame中筛选出这些ID对应的所有行。

这种方法无需手动指定列名,会自动检查除ID外的所有列,完美适配多列场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:10:45