【发布时间】:2022-01-12 21:28:20
【问题描述】:
请注意,在转向您之前,我已经浏览了各种帖子。 事实上,我尝试实现中提供的解决方案:dropping rows from dataframe based on a "not in" condition
我的问题如下。假设我有一个巨大的数据框,我想删除其中的重复项。我很清楚我可以使用 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 行。
谁能帮我理解为什么会这样?我试图尽可能简化问题。
非常感谢!
【问题讨论】:
-
8942 - 8672 = 270 = 135 * 2嗯.... -
也许
list1中的每个id都有两行? -
请注意,您也可以像这样删除行:
data1.set_index('id').drop(list1).reset_index() -
非常感谢,我检查了前50行,实际上有2-3行具有相同的id。话虽这么说,有没有办法限制最多 1 个样本的去除?
标签: pandas dataframe duplicates isin