在Pandas中,我可以使用
基于单个列删除数据库中的重复行data.drop_duplicates('foo')
命令。我想知道是否有办法在另一张表中捕获这些数据以供独立审核。
答案 0 :(得分:3)
您可以在duplicated
列上调用foo
方法,然后根据它对原始数据框进行子集化,如下所示:
data.loc[data['foo'].duplicated(), :]
举个例子:
data = pd.DataFrame({'foo': [1,1,1,2,2,2], 'bar': [1,1,2,2,3,3]})
data
# bar foo
#0 1 1
#1 1 1
#2 2 1
#3 2 2
#4 3 2
#5 3 2
data.loc[data['foo'].duplicated(), :]
# bar foo
#1 1 1
#2 2 1
#4 3 2
#5 3 2
答案 1 :(得分:2)
drop_duplicates
有一个伴随方法duplicated
。他们都采取类似的论点。
关键论点是:
subset
- 列标签或标签序列
keep
- {‘first’
,‘last’
,False
},默认‘first’
keep
设置为'first'
时:
drop_duplicates
返回一个数据框,其中保留subset
指定的第一列匹配列,并删除其余部分。duplicated
返回一个布尔掩码,该索引使用与原始数据帧相同的索引编制索引,对于除'first'
之外的指定列集的所有重复组合,值为True。您可以使用此掩码来获取要删除的行或它的补码(与drop_duplicates
相同)df = pd.DataFrame(list('abcdbef'), columns=['letter'])
df
df.drop_duplicates(keep='first') # same as default
df.duplicated(keep='first') # same as default
0 False
1 False
2 False
3 False
4 True
5 False
6 False
dtype: bool
请注意,与'b'
的第一个实例对应的行是False
,而第二个实例是True
,表示要删除它。
df[df.duplicated(keep='first')]
keep='last'
和keep=False
以下是将keep
参数设置为'last'
或False
删除重复项
df.drop_duplicates(keep='last')
df.duplicated(keep='last')
0 False
1 True
2 False
3 False
4 False
5 False
6 False
dtype: bool
这次第一个实例是True
,表示要删除它,而第二个实例是False
,表示不会被删除。
只是重复
df[df.duplicated(keep='last')]
删除重复项
df.drop_duplicates(keep=False)
df.duplicated(keep=False)
0 False
1 True
2 False
3 False
4 True
5 False
6 False
dtype: bool
这次两个实例都是True
,两者都被删除了。
只是重复
df[df.duplicated(keep=False)]