【问题标题】:Duplicates are not removing after I remove duplicate combo values of rows删除行的重复组合值后,重复项未删除
【发布时间】:2019-08-08 12:12:24
【问题描述】:

我正在尝试删除 df 中两个 cols 的重复值 - 我没有收到错误,但代码运行但没有删除 dups -

首先,我运行下面的函数来删除所有可能的重复组合,如下所示 -

def remove_dup_combos(df):
u = df.filter(like='id').values
m = pd.DataFrame(np.sort(u, axis=1)).duplicated()
df = df[~m]

return df

这会删除所有重复的组合

我现在尝试使用

删除两个 id cols 中的所有 dup
def remove_dups(df):
df = df.drop_duplicates(['id1', 'id2'],keep='first')

return df

但这并没有给我预期的输出,并且输出与上面的第二个输出相同

谢谢!

【问题讨论】:

    标签: python-3.x pandas dataframe duplicates data-analysis


    【解决方案1】:

    您似乎希望根据 unordered id 确定重复项,而 Pandas 没有这种感觉。比如这两个条目

    df = pd.DataFrame([['a', 'b'], ['b', 'a']], columns=['id1', 'id2'])
    
      id1 id2
    0   a   b
    1   b   a
    

    会被认为不同,因为它们在 id1id2 上不匹配。如果要检查两个ids 的无序集是否重复,可以比较它们的最小值和最大值是否重复。比如添加一些临时列,

    df.assign(min_id = lambda x : x[['id1', 'id2']].min(axis=1),
              max_id = lambda x : x[['id1', 'id2']].max(axis=1)) \
        .drop_duplicates(subset=['min_id', 'max_id']) \
        .drop(['min_id', 'max_id'], axis=1)
    

    这几乎就是问题中的 NumPy 解决方案正在做的事情。

    【讨论】:

      【解决方案2】:

      如果需要删除每列相同的值:

      df = df[df['id1'] != df['id2']]
      

      【讨论】:

      • 嗨,不,我不需要那个,我想保留那个,-上面的两个函数都运行-但是第二个实际上并没有删除重复项。 @jezrael
      • @Chris90 - 好的,那么样本数据的预期输出是什么?
      • 预期输出是最后一个输出 - 除了 id1 中的所有重复项和 id2 中的所有重复项都被删除,第一个实例保留任何重复项。 @jezrael
      • @Chris90 - 我很困惑 - 不明白。因此,有理由要求样本数据的预期输出以便更好地理解。我认为最终干净的 DataFrame 中需要哪些行?
      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 2013-04-05
      • 2014-06-08
      • 2022-07-22
      • 2010-12-25
      相关资源
      最近更新 更多