如何使用 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 行以在数据框中重复条目?的主要内容,如果未能解决你的问题,请参考以下文章

CSS Grid如何选择行以添加悬停效果?

VBA,向上/向下填充行以与最后一行对齐

使用数据表列出 select/selectall 行以通过脚本选择行,那么我如何设置/获取所选行的动态 id

根据各种条件组合行以具有相同的 ID

Python2.7 - 将参数传递给命令行以根据参数过滤CSV

将 Python 脚本退出到 IPython 命令行以进行调试