如何使用 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
想象一个数据框,例如:
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