根据两列删除重复项,同时删除不一致的数据

时间:2019-04-09 11:51:12

标签: python python-3.x pandas

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

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

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

   a  b  c
0  2  4  1
1  3  5  0

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

1 个答案:

答案 0 :(得分:5)

首先用GroupBy.transformSeriesGroupBy.nunique过滤行,以仅使用boolean indexing然后用DataFrame.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