如何在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
相关产品推荐
相关产品推荐

