如何查找ID与NAMESPACE相同但其他列值不同的非重复行
可行解决方法
1 SQL 数据库场景
先统计每一组ID+NAMESPACE下全字段去重后的行数,筛选行数大于1的组对应的所有记录即可:
WITH group_validate AS ( SELECT ID, NAMESPACE FROM 你的表名 GROUP BY ID, NAMESPACE -- 统计每组全字段去重后的行数,大于1说明组内存在其他字段不同的记录 HAVING COUNT(DISTINCT CONCAT_WS('|', ID, NAMESPACE, 其他字段1, 其他字段2, 其他字段n)) > 1 -- 若使用PostgreSQL等支持整行去重统计的数据库,可简化为 HAVING COUNT(DISTINCT 你的表名.*) > 1 ) SELECT t.* FROM 你的表名 t INNER JOIN group_validate g ON t.ID = g.ID AND t.NAMESPACE = g.NAMESPACE;
2 Python Pandas 本地数据集场景
import pandas as pd # 读取数据集,可根据你的文件格式替换为read_excel等方法 df = pd.read_csv("你的数据文件路径") # 按ID、NAMESPACE分组,筛选全字段去重后行数大于1的分组的所有记录 target_df = df.groupby(["ID", "NAMESPACE"], as_index=False).filter( lambda group: group.drop_duplicates().shape[0] > 1 ) # 输出结果 print(target_df) # 可导出到文件 target_df.to_csv("筛选结果.csv", index=False)
3 Excel 小数据集手动处理场景
- 新增辅助列,拼接所有字段避免误判,公式为
=A2&"|"&B2&"|"&C2&"|"&...,按你的列顺序替换列号即可 - 新增分组校验列,统计每个
ID+NAMESPACE组内辅助列的去重数量,公式为=SUMPRODUCT((A$2:A$数据末尾行号=A2)*(B$2:B$数据末尾行号=B2)*(1/COUNTIF(D$2:D$数据末尾行号,D$2:D$数据末尾行号))),其中D列为第一步新建的辅助列,A为ID列、B为NAMESPACE列 - 筛选分组校验列数值大于1的所有行,即为符合要求的记录
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

