2015-10-19 76 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