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

如何从上到下移除两非分组列中的重复项(逐行校验)

行级校验的DataFrame去重实现

问题场景

给定如下示例DataFrame,需对x、y两列进行行级去重校验:

import pandas as pd

df = pd.DataFrame({
    'x': ['A', 'B', 'B', 'B', 'C', 'D'],
    'y': ['BB', 'BB', 'AA', 'CC', 'DD', 'CC'],
    'z': [8, 7.5, 6.2, 5, 4, 3]
}, index=[1,2,3,4,5,6])

需求规则:逐行校验x、y列,只要任意一列的值在之前的行中出现过,就删除当前行。最终期望保留的结果为:

x   y    z
1  A  BB  8.0
3  B  AA  6.2
5  C  DD  4.0
6  D  CC  3.0

高效实现方案

针对大数据集,可通过集合跟踪已出现值的方式实现行级过滤,避免分组或单列处理导致的过度删除:

# 初始化集合,记录已出现的x、y值
seen_x = set()
seen_y = set()

# 定义行过滤逻辑
def filter_row(row):
    # 检查当前行的x或y是否已出现过
    if row['x'] in seen_x or row['y'] in seen_y:
        return False
    # 未出现过则加入集合,保留该行
    seen_x.add(row['x'])
    seen_y.add(row['y'])
    return True

# 应用过滤得到结果
result_df = df[df.apply(filter_row, axis=1)]

逻辑说明

  • 用两个独立集合分别跟踪x和y列已出现的值,确保逐行校验的顺序性
  • 每一行仅在x和y均为首次出现时才被保留,严格符合需求中的行级校验规则
  • 该方法时间复杂度为O(n),适合处理大规模数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:25:01