如何删除数据表指定列含重复值的所有关联行 仅保留唯一值行
按指定列删除所有重复关联行(仅保留列值唯一的行)
核心逻辑很简单:先统计你指定的判断列里每个值的出现次数,只保留这个值出现次数刚好为1的行,就能得到你要的结果,和示例转换效果完全匹配。
示例对照
原始数据:
| ID | LETTER |
|---|---|
| 1 | A |
| 2 | B |
| 3 | B |
| 4 | C |
| 5 | D |
| 6 | D |
| 7 | F |
| 8 | A |
期望输出:
| ID | LETTER |
|---|---|
| 4 | C |
| 7 | F |
不同场景的实现方法
1. Python(pandas 库,适合批量数据处理)
代码非常简洁,替换列名就能直接用:
import pandas as pd # 读取/构造你的原始数据,这里直接用示例数据演示 df = pd.DataFrame({ 'ID': [1,2,3,4,5,6,7,8], 'LETTER': ['A','B','B','C','D','D','F','A'] }) # 核心处理:筛选LETTER列值出现次数为1的行,要换判断列就把代码里的LETTER改成你的目标列名 result = df[df['LETTER'].map(df['LETTER'].value_counts()) == 1]
运行后result的输出和期望结果完全一致。
2. SQL(适合数据库表处理)
支持窗口函数的数据库(MySQL8.0+、PostgreSQL、Hive等)直接用下面的写法,把表名、列名替换成你自己的就行:
WITH stat AS ( SELECT ID, LETTER, COUNT(1) OVER(PARTITION BY LETTER) AS cnt FROM 你的表名 ) SELECT ID, LETTER FROM stat WHERE cnt = 1;
如果是不支持窗口函数的老版本数据库,用分组关联的写法也能实现:
SELECT t.ID, t.LETTER FROM 你的表名 t INNER JOIN ( SELECT LETTER FROM 你的表名 GROUP BY LETTER HAVING COUNT(1) = 1 ) tmp ON t.LETTER = tmp.LETTER;
3. Excel(适合小数据量手动处理)
操作步骤:
- 新增一列辅助列,假设你的判断列是B列(LETTER列),在辅助列第二行(第一行是表头)输入公式
=COUNTIF(B:B,B2),下拉把公式填充到所有数据行 - 给整张表开筛选,筛选出辅助列值不等于1的所有行,批量删除
- 删除辅助列,剩下的内容就是你要的结果
内容的提问来源于stack exchange,提问作者RAFAEL RIBEIRO
相关产品推荐
相关产品推荐

