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

Spark如何基于多列重复判定规则对DataFrame按指定条件去重

DataFrame指定组合列去重方案

去重规则

  • 以a、b两列的组合作为重复判定条件
  • 同一a、b组合下有多条重复记录时,仅保留d == 1的记录
  • 若a、b组合无重复,直接保留对应记录,无额外过滤条件

示例原始数据

+----+----+----+----+
| a  |  b |  c |  d |
+----+----+----+----+
| zz | ss | 0  | 1  |
+----+----+----+----+
| zz | ss | 0  | 0  |
+----+----+----+----+
| qs | qs | 1  | 1  |
+----+----+----+----+

实现代码

方法1:分组过滤(逻辑直观,适合小数据量)

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    "a": ["zz", "zz", "qs"],
    "b": ["ss", "ss", "qs"],
    "c": [0, 0, 1],
    "d": [1, 0, 1]
})

# 按规则过滤
df_result = df.groupby(["a", "b"], group_keys=False).apply(
    lambda group: group if len(group) == 1 else group[group["d"] == 1]
).reset_index(drop=True)

方法2:排序去重(性能更优,适合大数据量)

利用d降序排序后,同一a、b组合下d=1的记录会排在最前,直接去重保留第一条即可:

df_sorted = df.sort_values(by=["a", "b", "d"], ascending=[True, True, False])
df_result = df_sorted.drop_duplicates(subset=["a", "b"], keep="first").reset_index(drop=True)

输出结果

+----+----+----+----+
| a  |  b |  c |  d |
+----+----+----+----+
| zz | ss | 0  | 1  |
+----+----+----+----+
| qs | qs | 1  | 1  |
+----+----+----+----+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:45:02