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

Pandas中drop_duplicates函数未按预期工作的问题排查

问题原因与解决方案

为什么drop_duplicates(keep='first')不符合预期?

pandas.Series.drop_duplicates()的核心逻辑是全局去重:它会遍历整个Series,只保留每个唯一值的第一次出现,后续所有和该值重复的元素都会被删除——不管这些元素是不是和前面的重复值连续。

放到你的数据场景里:

  • 第一个8672.0被保留后,后面所有的8672.0(包括中间再次出现的那一大组)都会被判定为重复并删除
  • 第一个8670.0被保留后,后续所有的8670.0也会被过滤掉
    所以最终只返回两个全局唯一值,和你的预期不符。

如何实现“保留每个连续重复块的第一个元素”?

你需要的是识别连续重复的分组,而非全局唯一值。可以通过对比当前元素与前一个元素是否不同来实现:

import pandas as pd

# 构造你的Series数据
s = pd.Series(
    [8672.0]*4 + 
    [8670.0]*6 + 
    [8672.0]*10 + 
    [8670.0]*5
)

# 生成标记:当前值和前一个值不同的位置(首元素默认标记为True)
mask = s != s.shift()

# 筛选出标记为True的元素,即每个连续块的第一个值
expected_result = s[mask]

print(expected_result.values)
# 输出:[8672.0 8670.0 8672.0 8670.0]

补充说明

  • shift()默认将元素向后移动一位,这样我们就能逐个对比当前元素和它的前一个元素
  • 首元素的前一个值是NaN,在pandas中NaN和任何值比较都会返回True,所以首元素会被自动保留,正好符合“第一个块的起始元素”的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:13