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
相关产品推荐
相关产品推荐

