当前位置: 首页 > 知识库问答 >
问题:

删除重复项而不删除重复项

何楷
2023-03-14

请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行

我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。

#My list
list1 = ['s1' , 's2']
print(len(list1))
#My dataframe
data1 = pd.DataFrame(data={'id':['s1' , 's2', 's3', 's4', 's5' , 's6']})
print(len(data1))
#Remove all the rows that hold a value contained in list1 matched against the 'id' column
data2 = data1[~data1.id.isin(list1)]
print(len(data2))

现在,让我们看看输出:

Len list1 = 135
Len data1 = 8942
Len data2 = 8672

因此,我得出结论,我的代码以某种方式将要删除的行加倍并删除它们。

然而,当我遵循drop_duplicates方法时,我的代码工作正常,删除了135行。

你们谁能帮我理解为什么会这样?我尽量简化这个问题。

谢谢!

共有1个答案

祝高超
2023-03-14

这是一种非常痛苦的方式来完成你的要求。也许有人会看到这一点,并做出一个不那么痛苦的方式。我特别远离groupby('id')。first()作为删除重复项的方法,因为您提到需要首先创建重复项列表。但这将是我下一个最好的建议。

不管怎样,我在你的例子中添加了s1和s2的副本

df = pd.DataFrame(data={'id':['s1' , 's2', 's3', 's4', 's5' , 's6', 's1' , 's2', 's2']})

查找具有多个条目的ID(假设重复)。在这里,我确实使用Groupby来获取计数并保留它们

dup_list = df[df.groupby('id')['id'].transform('count') > 1]['id'].unique().tolist()
print(dup_list)

['s1', 's2']

然后遍历列表,找到重复的索引,并删除除第一个以外的所有索引

for id in dup_list:
    # print(df[df['id']==id].index[1:].to_list())
    drp = df[df['id']==id].index[1:].to_list()
    df.drop(drp, inplace=True)
df

   id
0  s1
1  s2
2  s3
3  s4
4  s5
5  s6

指数6和7下降

 类似资料:
  • 问题内容: 如何从以以下方式设置的表中删除重复项? 一个工作人员可以有多个与他们相关联的type_ID,我想删除所有重复的类型。如果有重复项,我想删除具有最新条目的类型。 问题答案: 窗口函数row_number()的教科书候选: 这也照顾了一组相同的受骗者的情况。 请参阅有关data.SE的简化演示。 更新较简单的版本 事实证明,这可以简化:在SQL Server中,您可以直接从CTE中删除:

  • 问题内容: 我正在研究一种方法,以递归方式删除ArrayList中元素的重复项。但是我遇到了一个问题,我的方法有效并删除了一些元素,但不是所有重复项。 这是我的输入: 这是输出: 而我的方法: 我知道我只是删除了所述值的最后一个元素,然后迭代到下一个元素。我想知道如何更改此设置以删除所有重复的元素。另外,我的输出的一部分使我感到困惑,其中有三个值“ 400”,但输出中只显示一个。 谢谢您的帮助。

  • 我正在尝试创建一个搜索算法,该算法将坐标对存储在一个名为HashSquaresPec的包装器类中。为了避免重复并保持插入顺序,我将每个HashSquareSpec插入到LinkedHashSet中。即使我已经重写了equals()方法和hashCode()方法,LinkedHashSet仍然接受两个具有相同坐标对的HashSquareSpec对象。 HashSquare类 和HashSquareS

  • 问题内容: 我有两个列表需要合并,第二个列表忽略了第一个列表的重复项。..有点难以解释,所以让我展示一个代码看起来像什么,以及我想要什么的示例。 您会注意到结果具有第一个列表, 包括 其两个“ 2”值,但是second_list也具有附加的2和5值这一事实并未添加到第一个列表中。 通常,对于这样的事情,我会使用集合,但是first_list上的集合会清除它已经具有的重复值。所以我只是想知道什么是实

  • 本文向大家介绍pandas 删除重复,包括了pandas 删除重复的使用技巧和注意事项,需要的朋友参考一下 示例 用途drop_duplicates: 当您不想获取数据框的副本,而要修改现有的数据框时:            

  • 问题内容: 我有这样的桌子 我想执行一个查询,以除去所有最新的重复项。我希望你有个主意吗? 例如,查询后的表必须是这样的 问题答案: 语法可能需要调整,但是应该做到这一点。此外,您可能希望将子查询预查询到其自己的表FIRST中,然后对该结果集运行DELETE FROM。