如何基于DataFrame特定列的前值移除连续重复行?
处理大型DataFrame中连续重复行的最优方案
针对你需求的仅移除col2列中与前一行连续重复的行、保留首次出现行的场景,最优实现是使用pandas的向量化对比操作,具体内容如下:
原数据示例
import pandas as pd data = pd.DataFrame(data={'col1': [1,2,3,4,5,6,7,8,9], 'col2': [1.55,1.55,1.55,1.8,1.9,1.9,1.9,2.1,2.1]})
最优处理代码
# 保留col2与前一行值不同的所有行(含第一行) clean_data = data[data['col2'].ne(data['col2'].shift())]
处理结果
print(clean_data) # 输出: # col1 col2 # 0 1 1.55 # 3 4 1.80 # 4 5 1.90 # 7 8 2.10
方案说明
核心逻辑:
data['col2'].shift():将col2列的元素整体向下偏移一行,第一行变为NaN.ne():是pandas的向量化"不等于"判断,返回布尔值序列,其中True表示当前行col2值与上一行不同- 用该布尔序列过滤原DataFrame,即可保留所有非连续重复的行(包括第一行,因为
NaN与任何值比较"不等于"都为True)
效率优势:
这种方法是pandas底层的向量化操作,基于numpy实现,完全避开了Python层面的循环,处理百万级甚至更大规模的DataFrame时,速度比手动循环、apply等方法快10-100倍,是大型数据集下的最优选择。误区提醒:
不要使用drop_duplicates(),因为该方法会移除所有重复值(无论是否连续),不符合你仅移除连续重复行的需求。
内容的提问来源于stack exchange,提问作者Bas R
相关产品推荐
相关产品推荐

