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