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

Pandas优化:仅保留列值首次出现,其余替换为空字符串

解决方法:用Pandas矢量化操作高效处理内存优化需求

针对你提出的需求——仅保留每个value的首次出现,其余重复实例替换为空字符串,完全不需要用低效的循环!Pandas提供了多种原生矢量化方法,处理大数据集速度极快。

方法1:利用duplicated()标记全局重复值

duplicated()函数会自动标记除首次出现外的所有重复行,我们可以结合where()方法将重复的value替换为空字符串:

import pandas as pd

# 初始化你的DataFrame
X = pd.DataFrame([[1, "abc"], [2, "abc"], [3, "def"], [4, "def"], [5, "def"], [6, "def"], [7, "ghi"], [8, "jkl"], [9, "jkl"]])
X.columns = ["id", "value"]

# 核心操作:仅保留首次出现的value,其余替换为空
X['value'] = X['value'].where(~X['value'].duplicated(), '')

执行后得到的结果:

id value
0   1   abc
1   2      
2   3   def
3   4      
4   5      
5   6      
6   7   ghi
7   8   jkl
8   9      

方法2:对比前一行处理连续重复值

如果你只需要替换连续重复的实例(而非全局重复),可以用shift()对比当前行与前一行的value:

X['value'] = X['value'].where(X['value'] != X['value'].shift(1), '')

在你的数据集上,这个方法的结果和方法1完全一致,因为所有重复值都是连续出现的。

为什么这两种方法高效?

这两种方法都是Pandas的矢量化操作,底层基于C语言实现,避免了Python循环的开销,处理百万级甚至更大的数据集时,速度会比循环快几个数量级,完美解决你担心的效率问题。

关于你给出的期望结果的小说明

注意到你提供的期望结果中def的所有实例都被替换为空,这和“保留首次出现”的描述略有矛盾,推测可能是笔误。如果你的真实需求确实是让def全部为空,那可以额外添加过滤条件,但基于你原问题的描述,上面的两种方法完全符合“保留每个唯一value首次出现,其余替换为空”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:40:50