检查Pandas DataFrameGroupBy对象中列子集的重复行



假设我有一个groupby对象(按Col1分组),如下所示:

Col1     Col2     Col3     Col4     Col5
----------------------------------------
AAA       001      456      846      239     row1
002      374      238      904     row2
003      456      846      239     row3
BBB       001      923      222      398     row1
002      923      222      398     row2
003      755      656      949     row3
CCC       001      324      454      565     row1
002      744      345      336     row2
003      567      355      756     row3

是否有一种方法来检查每个组中基于[Col3, Col4, Col5]的重复行。在上面的示例中,对于组AAA,第1行和第3行匹配,因为Col3、Col4、Col5值相同。同样在BBB组,第1行和第2行匹配。在CCC组中,使用上述逻辑,我们没有任何重复的行。

我们可以创建一个包含'n'布尔元素的列表(其中'n'表示组的数量),如果该组有任何重复,则将其填充为True,否则为False。因此,对于上面的示例,输出将是:

[True, True, False]

您可以尝试groupbyCol1,然后使用duplicated()检查是否有任何从Col3Col5的复制

out = (df.groupby('Col1')
.apply(lambda g: g[['Col3','Col4','Col5']].duplicated().any())
.tolist())
print(out)
[True, True, False]