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

如何在Pandas DataFrame中仅保留每组重复行的至多两个实例

保留重复行至多2个实例的Pandas实现方法

现有数据

初始的Pandas DataFrame如下:

Time                        X     Y
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.943522  200   10.1
2023-02-01T15:03:02.943522  200   10.1

需求说明

对完全重复的行组,保留至多2个实例:比如时间为.565333的4条重复行需保留2条;原本只有2条的重复行则全部保留。

注意:使用df[~df.duplicated()]仅能保留每组重复行的1个实例,无法满足需求,其输出结果如下:

2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.943522  200   10.1

期望结果

2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.943522  200   10.1

实现方法

方法1:分组后取前2行

通过groupby按所有列分组,对每个分组保留前2行:

result = df.groupby(df.columns.tolist()).head(2)

df.columns.tolist()指定用所有列作为分组依据,head(2)直接截取每个分组的前2条数据,精准满足每组至多2个实例的要求。

方法2:利用分组计数筛选

先给每个重复组内的行标记序号,再筛选序号小于2的行:

result = df[df.groupby(df.columns.tolist()).cumcount() < 2]

cumcount()会在每个分组内从0开始递增计数,筛选<2的行即可保留每组的前2条数据,效果与方法1一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:57:22