列重复值处理:保留首值,后续重复值置空且保留行
没问题!这种需求在做数据整理或者报表美化的时候特别常见——既要保留所有行,又要让重复的数值只显示第一次出现的那个。我给你准备了两种常用场景的解决方案,你按需选就行:
先明确你的需求对应数据
原数据
| Col1 | Col2 |
|---|---|
| a | 1 |
| b | 1 |
| c | 1 |
| d | 2 |
期望结果
| Col1 | Col2 |
|---|---|
| a | 1 |
| b | |
| c | |
| d | 2 |
方案1:Python Pandas 批量处理
这是处理大量数据最高效的方式,逻辑清晰还能复用:
import pandas as pd # 构建原数据的DataFrame df = pd.DataFrame({ 'Col1': ['a', 'b', 'c', 'd'], 'Col2': [1, 1, 1, 2] }) # 核心处理逻辑:保留Col2首次出现的值,后续重复项替换为空字符串 df['Col2'] = df['Col2'].where(~df['Col2'].duplicated(), '') # 输出结果 print(df)
逻辑解释:
df['Col2'].duplicated():生成布尔序列,把除首次出现外的所有重复项标记为True~是取反操作,将首次出现的项标记为True,重复项标记为Falsewhere()方法:条件为True时保留原数值,为False时替换为空字符串
运行后就能得到你想要的结果。
方案2:Excel 公式快速实现
如果习惯用Excel处理数据,用公式就能轻松搞定:
- 在空白列(比如C列)的C2单元格输入公式:
=IF(COUNTIF($B$2:B2,B2)=1,B2,"")
- 选中C2单元格,下拉填充到所有行
- 最后把C列的结果复制粘贴回B列,完成替换
公式解释:
COUNTIF($B$2:B2,B2):统计从B2到当前行的B列中,和当前单元格值相同的数量- 当数量等于1时,说明是首次出现,保留原数值;否则返回空字符串
内容的提问来源于stack exchange,提问作者Juston Lantrip
相关产品推荐
相关产品推荐

