2015-10-19 77 views
1

我使用Pandas读取csv文件。然后,我检查,看是否有使用下面的代码数据中的任何重复的行:查找pandas中groupby的副本

import pandas as pd 

df= pd.read_csv("data.csv", na_values=["", " ", "-"]) 

print df.shape 
>> (71644, 15) 

print df.drop_duplicates().shape 
>> (31171, 15) 

我发现有一些重复的行,所以我想看看这行出现一次以上:

data_groups = df.groupby(df.columns.tolist()) 
size = data_groups.size() 
size[size > 1] 

这样做我得到Series([], dtype: int64)

Futhermore,我能找到重复的行执行以下操作:

duplicates = df[(df.duplicated() == True)] 

print duplicates.shape 
>> (40473, 15) 

所以df.drop_duplicates()df[(df.duplicated() == True)]显示,有重复的行,但groupby没有。

我的数据包含字符串,整数,浮点数和南。

我误解了我上面提到的函数或其他事情发生的事情吗?

回答

2

只需添加reset_index()即可将聚合重新对齐到新的数据框。

此外,size()函数会创建一个未标记的0列,您可以使用该列来过滤重复行。然后,找到结果数据帧的长度,以输出与其他函数一样的重复计数:drop_duplicates(),duplicated()==True

data_groups = df.groupby(df.columns.tolist()) 
size = data_groups.size().reset_index() 
size[size[0] > 1]  # DATAFRAME OF DUPLICATES 

len(size[size[0] > 1]) # NUMBER OF DUPLICATES