检查 Pandas DataFrameGroupBy 对象中列子集的重复行
Check for duplicate rows for a subset of columns in a Pandas DataFrameGroupBy object
假设我有一个 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]
您可以尝试 groupby
列 Col1
然后使用 duplicated()
检查是否有从 Col3
到 Col5
的重复项
out = (df.groupby('Col1')
.apply(lambda g: g[['Col3','Col4','Col5']].duplicated().any())
.tolist())
print(out)
[True, True, False]
假设我有一个 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]
您可以尝试 groupby
列 Col1
然后使用 duplicated()
检查是否有从 Col3
到 Col5
out = (df.groupby('Col1')
.apply(lambda g: g[['Col3','Col4','Col5']].duplicated().any())
.tolist())
print(out)
[True, True, False]