【问题标题】:Pandas Dataframe duplicate records picking up incorrect recordsPandas Dataframe 重复记录拾取不正确的记录
【发布时间】:2016-06-02 20:37:13
【问题描述】:

我正在使用 Pandas、Jupyter Notebooks 和 Python。我有一个包含 4 列和 10000 条记录的数据集。目前,当我使用以下代码获取重复项时,代码以某种方式获取了不正确的记录。仅供参考:列的数据类型如下:

Initial_Date = int64
Final_Date = int64
Origin = object
sub_location = object

我当前的代码是:

dup = df.duplicated(['Initial_Date','Final_Date','Origin','sub_location'], keep='last')

以下是使用上述代码获取的数据集示例:

00121980,00121980,Australia,Brighton:Queensland
00121980,00121980,Australia,Brisbane:Queensland
17021987,17021987,Bangladesh,Sylhet-Sunamganj
17021987,17021987,Brazil,Sao Paolo suburb

如果您查看前两条记录:初始日期和最终日期以及 Origin 匹配但 sub_origin 不匹配,一条是布莱顿,另一条是布里斯班。

最后两条记录相同,日期匹配但来源不同。

据此,我了解到 df.duplicated 没有获取正确的记录,或者我没有正确使用它。数据类型对 df.duplicated 有影响吗?

如果我只使用df.duplicated,那么返回的布尔系列没有重复。有人可以解释/告诉我如何使用 .duplicated 吗?

请记住,这不是完整的数据集,但我提供的示例正是我在真实数据集中遇到的问题。我缩小了 df.duplicated 标准并遇到了这个错误。

谢谢大家:D

【问题讨论】:

    标签: python pandas dataframe duplicates jupyter


    【解决方案1】:

    注意keep参数:

    In [116]: s = pd.Series([1,1,1,2,3])
    
    In [117]: s
    Out[117]:
    0    1
    1    1
    2    1
    3    2
    4    3
    dtype: int64
    
    In [118]: s.duplicated(keep='first')
    Out[118]:
    0    False
    1     True
    2     True
    3    False
    4    False
    dtype: bool
    
    In [119]: s.duplicated(keep='last')
    Out[119]:
    0     True
    1     True
    2    False
    3    False
    4    False
    dtype: bool
    
    In [120]: s.duplicated(keep=False)
    Out[120]:
    0     True
    1     True
    2     True
    3    False
    4    False
    dtype: bool
    

    我猜你想用keep=False

    来自docs

    保持:{‘first’, ‘last’, False},默认‘first’

    first :将重复项标记为 True,但第一次出现除外。

    last :将重复项标记为 True,但最后一次出现除外。

    False :将所有重复项标记为 True。

    【讨论】:

    • @Timetraveller 这个答案是正确的。在您的示例中,dup 没有显示由于keep=last 参数而重复的所有记录。如果设置了keep=False,您会看到最后两条记录都是其他记录的重复,而不是彼此的重复。
    • @MaxU 您好,如果我想删除重复项会怎样。如果我选择 keep=False 则所有实例都将被删除。在上面的示例中,包含值 1 的记录 0,1,2 将被删除,对吗?如果我想保留这三个记录中的一个,我应该将保留更改为“最后一个”还是“第一个”?
    • @MaxU 谢谢老兄。
    • @Timetraveller,不客气。如果要删除重复项,请使用 drop_duplicates()。它具有相同的参数:keep
    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多