将重复分成单独的表 - 熊猫

时间:2016-07-12 02:47:49

标签: python pandas dataframe duplicates

在Pandas中,我可以使用

基于单个列删除数据库中的重复行
data.drop_duplicates('foo')

命令。我想知道是否有办法在另一张表中捕获这些数据以供独立审核。

2 个答案:

答案 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

enter image description here

df.drop_duplicates(keep='first')  # same as default

enter image description here

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')]

enter image description here

keep='last'keep=False

以下是将keep参数设置为'last'False

的示例

删除重复项

df.drop_duplicates(keep='last')

enter image description here

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')]

enter image description here

删除重复项

df.drop_duplicates(keep=False)

enter image description here

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)]

enter image description here