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



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

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

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

首先按GroupBy.transform过滤行,SeriesGroupBy.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

最新更新