我有一个这样的熊猫数据帧:
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