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

Pandas如何基于单列特定类别去重并保留最后一条记录?

实现单列特定类别去重并保留最后一条记录

原始数据

首先定义目标DataFrame:

import pandas as pd

data = pd.DataFrame({"col1": ["a", "a", "a", "a", "a", "a"],
                     "col2": [0,0,0,1,1, 1],
                     "col3": [1,2,3,4,5, 6]})

原始数据如下:

col1  col2  col3
0    a     0     1
1    a     0     2
2    a     0     3
3    a     1     4
4    a     1     5
5    a     1     6

需求说明

需要对col2 == 1的行进行去重,仅保留该类别下的最后一条记录;col2 == 0的所有行需完整保留,最终期望输出:

col1  col2  col3
0    a     0     1
1    a     0     2
2    a     0     3
5    a     1     6

原有代码问题

原代码data[~(data.duplicated(["col2"]) & data.col2.eq(1))]仅能保留col2 ==1的第一条记录,无法满足保留最后一条的需求。

解决方案

方法一:利用duplicated的keep='last'参数

通过标记col2=1分组中除最后一行外的重复项,再过滤掉这些标记行:

# 生成需要删除的行的掩码:col2=1且不是该分组最后一行的重复项
mask = data.duplicated(subset=["col2"], keep='last') & data.col2.eq(1)
# 保留未被标记的行
result = data[~mask]

方法二:分组后针对性筛选

对col2分组,col2=1的组仅取最后一行,其他组保留全部行:

result = data.groupby('col2', group_keys=False).apply(
    lambda x: x.tail(1) if x.name == 1 else x
)

两种方法均可得到符合期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:42:43