【问题标题】:Removing duplicates based on two columns while deleting inconsistent data基于两列删除重复项,同时删除不一致的数据
【发布时间】:2019-04-09 21:55:35
【问题描述】:

我有一个这样的熊猫数据框:

   a  b  c
0  1  1  1
1  1  1  0
2  2  4  1    
3  3  5  0
4  3  5  0

其中前 2 列('a' 和 'b')是 ID,而最后一列('c')是验证(0 = neg,1 = pos)。我确实知道如何根据前 2 列的值删除重复项,但是在这种情况下,我还想删除不一致的数据,即验证为正数和负数的重复数据。因此,例如,前 2 行重复但不一致,因此我应该删除整个记录,而最后 2 行既重复又一致,因此我将保留其中一条记录。预期结果应该是:

   a  b  c
0  2  4  1
1  3  5  0

真实的数据框每组可以有两个以上的重复项,并且 如您所见,索引也已更改。谢谢。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    首先通过GroupBy.transformSeriesGroupBy.nunique 过滤行,以便仅使用boolean indexingDataFrame.drop_duplicates 获取唯一值组:

    df = (df[df.groupby(['a','b'])['c'].transform('nunique').eq(1)]
               .drop_duplicates(['a','b'])
               .reset_index(drop=True))
    print (df)
       a  b  c
    0  2  4  1
    1  3  5  0
    

    详情

    print (df.groupby(['a','b'])['c'].transform('nunique'))
    0    2
    1    2
    2    1
    3    1
    4    1
    Name: c, dtype: int64
    

    【讨论】:

    • 感谢 jezrael,您的回答几乎是完美的,它只是错过了我关于索引的请求的最后一部分,但这确实是一件非常容易的事情。我只是在最后添加了 .reset_index(drop=True) !!
    • @Simosini - 解决方案有问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2016-10-04
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多