如何使用 python 有选择地删除 x 行以在数据框中重复条目?
Posted
技术标签:
【中文标题】如何使用 python 有选择地删除 x 行以在数据框中重复条目?【英文标题】:How to selectively drop x number of rows for repeating entries in a dataframe using python? 【发布时间】:2021-04-02 15:39:00 【问题描述】:想象一个数据框,例如:
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 行(随机/第一行)用于 COL1 中的重复项。我真的不在乎我掉了哪一行,所以它可以是随机的,所以这是一个有意识的选择。
我不确定如何最好地优雅地解决这个问题,而不必遍历我的 df。我已经查看了 groupby、sort 和 drop.duplicates,但我不太确定这是要走的路。
我最好的猜测是按 COL1 排序,在我按 COL1(组)计数项目的地方添加 COL4,然后删除 COL4 超过 3 的所有行。但我不确定如何计算第 4 列中的项目... 这是要走的路吗?有什么建议吗?
预期输出:
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
【问题讨论】:
【参考方案1】:您可以在此处使用GroupBy.head
获取组中的第一个三个值,或使用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
【讨论】:
射击。这是非常愚蠢的容易。谢谢你! :D。几分钟后接受这个答案。另外,这是一个相关的线程/解决方案:***.com/questions/37997668/…以上是关于如何使用 python 有选择地删除 x 行以在数据框中重复条目?的主要内容,如果未能解决你的问题,请参考以下文章
使用数据表列出 select/selectall 行以通过脚本选择行,那么我如何设置/获取所选行的动态 id