如何使用 python 有选择地删除数据框中重复条目的 x 行数?

How to selectively drop x number of rows for repeating entries in a dataframe using python?

想象一个数据框,例如:

COL1             COL2                   COL3
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
bar              unique string          unique int             
bar              unique string          unique int
bar              unique string          unique int
bar              unique string          unique int
qux              unique string          unique int
qux              unique string          unique int
biz              unique string          unique int

我想设置一个规则,我最多只保留 3 (random/first) 行用于 COL1 中的重复项目。我真的不在乎我丢哪一行,所以它可以是随机的,所以这是一个有意识的选择。

我不确定如何最好地优雅地解决这个问题,而不必遍历我的 df。我查看了 groupby、sort & drop.duplicates,但我不太确定这是要走的路。

我对 atm 的最佳猜测是按 COL1 排序,在我按 COL1(组)计算项目的地方添加 COL4,然后删除 COL4 超过 3 的所有行。但我不确定如何计算项目中的项目第四列... 这是要走的路吗?有什么建议吗?

预期输出:

COL1             COL2                   COL3
foo              unique string          unique int
foo              unique string          unique int
foo              unique string          unique int
bar              unique string          unique int             
bar              unique string          unique int
bar              unique string          unique int
qux              unique string          unique int
qux              unique string          unique int
biz              unique string          unique int

您可以使用 GroupBy.head here to take 1st three value from a group or GroupBy.tail 取最后三个。

df.groupby('COL1').head(3)

   COL1           COL2        COL3
0   foo  unique string  unique int
1   foo  unique string  unique int
2   foo  unique string  unique int
5   bar  unique string  unique int
6   bar  unique string  unique int
7   bar  unique string  unique int
9   qux  unique string  unique int
10  qux  unique string  unique int
11  biz  unique string  unique int