【问题标题】:Remove/Drop duplicates EXCEPT where row contains certain string删除/删除重复项,除非行包含特定字符串
【发布时间】:2020-02-04 18:06:22
【问题描述】:

我需要使用 Pandas 删除所有重复项,除了单元格包含特定字符串的那些。

鉴于 DF 是:

NAME     ID        
Joe      110
Joe      123
Joe     PENDING
Mary    PENDING
Mary     110
Justin   123

我需要保留“ID”为 PENDING 的行,同时删除其余的重复项。

所需的输出如下所示:

NAME     ID        
Joe      110
Joe      123
Joe     PENDING
Mary    PENDING

【问题讨论】:

    标签: python python-3.x pandas duplicates


    【解决方案1】:

    你可以使用duplicated:

    import pandas as pd
    
    data = [['Joe', 110],
            ['Joe', 123],
            ['Joe', 'PENDING'],
            ['Mary', 'PENDING'],
            ['Mary', 110],
            ['Justin', 123]]
    
    df = pd.DataFrame(data=data, columns=['NAME', 'ID'])
    
    print(df[~df.duplicated('ID') | (df['ID'] == 'PENDING')])
    

    作为替代方案,您可以这样做:

    print(df[df.ID.duplicated(keep='last') | df.ID.eq('PENDING')])
    

    输出

       NAME       ID
    0   Joe      110
    1   Joe      123
    2   Joe  PENDING
    3  Mary  PENDING
    

    【讨论】:

      【解决方案2】:

      使用Series.duplicated~ 反转并通过| 链接按位OR 与比较IDPENDING 为掩码过滤boolean indexing

      df = df[~df['ID'].duplicated() | df['ID'].eq('PENDING')]
      print (df)
         NAME       ID
      0   Joe      110
      1   Joe      123
      2   Joe  PENDING
      3  Mary  PENDING
      

      【讨论】:

        【解决方案3】:

        如果您想同时保持NameID 的唯一性,只需添加另一列:

        import pandas as pd
        
        data = [['Joe', 110],
                ['Joe', 123],
                ['Joe', 'PENDING'],
                ['Mary', 'PENDING'],
                ['Mary', 'PENDING'],
                ['es', 110],
                ['Joe', 110],
                ['Joe', 123]]
        
        df = pd.DataFrame(data=data, columns=['NAME', 'ID'])
        
        df = df[~df.duplicated(['ID', 'NAME']) | (df['ID'] == 'PENDING')]
        
        print(df)
        

        【讨论】:

          猜你喜欢
          • 2016-01-05
          • 2020-09-27
          • 1970-01-01
          • 2019-04-05
          • 2016-07-16
          • 2021-03-12
          • 1970-01-01
          • 1970-01-01
          • 2021-03-17
          相关资源
          最近更新 更多