Python 在Pandas中使用groupby查找重复项

Python 在Pandas中使用groupby查找重复项,python,pandas,Python,Pandas,我使用熊猫读取csv文件。然后,我使用下面的代码检查数据中是否有重复的行: 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.g

我使用熊猫读取csv文件。然后,我使用下面的代码检查数据中是否有重复的行:

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]
这样我就得到了
系列([],数据类型:int64)

此外,我可以找到重复的行执行以下操作:

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

print duplicates.shape
>> (40473, 15)
因此
df.drop_duplicates()
df[(df.duplicated()==True)]
显示有重复行,但
groupby
没有

我的数据由字符串、整数、浮点和nan组成


我是否误解了上面提到的函数中的某些内容,或者发生了其他情况?

只需添加
reset\u 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

对我来说,这似乎是一个优雅的解决方案。