Python 在数据帧中查找重复行

Python 在数据帧中查找重复行,python,pandas,dataframe,duplicates,Python,Pandas,Dataframe,Duplicates,我试图在数据帧中找到重复的行 df=pd.DataFrame(data=[[1,2],[3,4],[1,2],[1,4],[1,2]],columns=['col1','col2']) df Out[15]: col1 col2 0 1 2 1 3 4 2 1 2 3 1 4 4 1 2 duplicate_bool = df.duplicated(subset=['col1','col2'], kee

我试图在数据帧中找到重复的行

df=pd.DataFrame(data=[[1,2],[3,4],[1,2],[1,4],[1,2]],columns=['col1','col2'])

df
Out[15]: 
   col1  col2
0     1     2
1     3     4
2     1     2
3     1     4
4     1     2

duplicate_bool = df.duplicated(subset=['col1','col2'], keep='first')
duplicate = df.loc[duplicate_bool == True]

duplicate
Out[16]: 
   col1  col2
2     1     2
4     1     2
有没有办法添加一列引用第一个副本(保留的副本)的索引


注意:在我的情况下,df可能非常大……

使用
groupby
,创建一列新的索引,然后调用
duplicated

df['index_original'] = df.groupby(['col1', 'col2']).col1.transform('idxmin')    
df[df.duplicated(subset=['col1','col2'], keep='first')]

   col1  col2  index_original
2     1     2               0
4     1     2               0

详细信息

groupby
前两列,然后调用
transform
+
idxmin
获取每组的第一个索引

df.groupby(['col1', 'col2']).col1.transform('idxmin') 

0    0
1    1
2    0
3    3
4    0
Name: col1, dtype: int64
duplicated
为我提供了一个要保留的值的布尔掩码:

df.duplicated(subset=['col1','col2'], keep='first')

0    False
1    False
2     True
3    False
4     True
dtype: bool

其余的只是布尔索引。

如果有3个重复项怎么办?很好!我编辑了这个问题,你能不能为不同的重复项添加输出,而不是只添加一个。@gabboshow如果答案有帮助,将感谢你的投票和接受。谢谢。如果我有90个栏目怎么办?@cᴏʟᴅsᴘᴇᴇᴅ 嗨,这个解决方案对于这个例子来说非常好,但是当我尝试将它应用到我的实际案例中时,它需要永远。。。大小为(11861200,2)@gabboshow 1100万行?那太可怕了。。。。你应该试着用
dask
并行你的groupby操作,你可以用这种方式处理巨大的数据帧。。。有没有办法不使用groupby,或者这是最快的解决方案?@gabboshow如果你使用的是熊猫。。。。没有比使用groupby更好的方法了。。。您可以尝试在
numpy
标记中问一个类似的问题,看看divakar是否为您提供了一个numpy解决方案。。。(他可能会)。@cs95如果我有90个专栏怎么办?
df.duplicated(subset=['col1','col2'], keep='first')

0    False
1    False
2     True
3    False
4     True
dtype: bool