【问题标题】:Find duplicates with groupby in Pandas在 Pandas 中使用 groupby 查找重复项
【发布时间】:2015-10-20 12:14:43
【问题描述】:

我使用 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.groupby(df.columns.tolist())
size = data_groups.size()
size[size > 1]

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

此外,我可以通过以下方式找到重复的行:

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

print duplicates.shape
>> (40473, 15)

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

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

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    【讨论】:

    • 这对我来说是一个优雅的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 2021-02-24
    • 2020-03-07
    • 2012-11-24
    • 1970-01-01
    • 2021-05-09
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多