将重复项拆分为单独的表 - Pandas

rof*_*ter 4 python duplicates dataframe pandas

在 Pandas 中,我可以使用

data.drop_duplicates('foo')
Run Code Online (Sandbox Code Playgroud)

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

piR*_*red 6

drop_duplicates有一个同伴方法duplicated。他们都持有类似的论点。

\n\n

关键论点是:

\n\n
    \n
  • subset- 列标签或标签序列\n\n
      \n
    • 仅考虑某些列来识别重复项,默认情况下使用所有列
    • \n
  • \n
  • keep- { \xe2\x80\x98first\xe2\x80\x99\xe2\x80\x98last\xe2\x80\x99False}, 默认\xe2\x80\x98first\xe2\x80\x99
  • \n
\n\n

keep设置为\'first\'

\n\n
    \n
  • drop_duplicatessubset返回一个数据帧,其中保留由 指定的列组合的第一次出现,并删除其余的。
  • \n
  • duplicated返回一个布尔掩码,其索引与原始数据帧具有相同的索引,对于指定列集的所有重复组合(除了\'first\'. 您可以使用此掩码来获取要删除的行或其补集(与 相同drop_duplicates
  • \n
\n\n

例子

\n\n
df = pd.DataFrame(list(\'abcdbef\'), columns=[\'letter\'])\ndf\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n
df.drop_duplicates(keep=\'first\')  # same as default\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n
df.duplicated(keep=\'first\')  # same as default\n\n0    False\n1    False\n2    False\n3    False\n4     True\n5    False\n6    False\ndtype: bool\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,与第一个实例对应的行\'b\'False,而第二个实例则True指示要删除它。

\n\n

回答

\n\n
df[df.duplicated(keep=\'first\')]\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n
\n\n

keep=\'last\'keep=False

\n\n

keep以下是参数设置为\'last\'or时的示例False

\n\n

删除重复项

\n\n
df.drop_duplicates(keep=\'last\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n
df.duplicated(keep=\'last\')\n\n0    False\n1     True\n2    False\n3    False\n4    False\n5    False\n6    False\ndtype: bool\n
Run Code Online (Sandbox Code Playgroud)\n\n

这次,第一个实例True指示要删除它,而第二个实例指示False不要删除它。

\n\n

只是重复项

\n\n
df[df.duplicated(keep=\'last\')]\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n

删除重复项

\n\n
df.drop_duplicates(keep=False)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n
df.duplicated(keep=False)\n\n0    False\n1     True\n2    False\n3    False\n4     True\n5    False\n6    False\ndtype: bool\n
Run Code Online (Sandbox Code Playgroud)\n\n

这次两个实例True都被删除。

\n\n

只是重复项

\n\n
df[df.duplicated(keep=False)]\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n


Psi*_*dom 5

您可以duplicatedfoo列上调用该方法,然后根据它对原始数据框进行子集化,如下所示:

data.loc[data['foo'].duplicated(), :]
Run Code Online (Sandbox Code Playgroud)

举个例子:

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
Run Code Online (Sandbox Code Playgroud)