【问题标题】:Returning all clusters without having duplicate items返回所有集群而没有重复项
【发布时间】:2020-04-27 11:42:31
【问题描述】:

我有一组集群数据。每个集群包含一组项目,示例如下:

集群 1) (1,1), (1,2)

簇 2) (2,2),(2,3),(2,4),(2,5)

集群 3) (3,1),(3,2),(3,3)

集群 4) (4,3),(4,4),(4,6),(4,7)

import pandas as pd

d = {'ID': [1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4], 'Item': [1, 2, 2, 3, 4, 5, 1, 2, 3, 3, 4, 6, 7]}
df = pd.DataFrame(data=d)

ID      Item
1        1
1        2
2        2
2        3
2        4
2        5
3        1
3        2
3        3
4        3
4        4
4        6
4        7

考虑到最终数据帧不能包含相同的项目,我需要从最终数据帧中的每个集群中获取至少一个项目,例如所需的输出数据帧:

ID      Item
1        1
1        2
2        4
2        5
3        3
4        6
4        7

我已经尝试执行以下操作,它保留了第一次出现,但它给出了以下结果,因为 ID 3 的记录在数据帧中都出现过:

df.drop_duplicates(subset='Item', keep='first')

ID      Item
1        1
1        2
2        3
2        4
2        5
4        6
4        7

然后,如果我尝试保持最后一次出现,如下所示,它最终会丢弃 ID 1,因为它的所有项目稍后都出现在数据框中:

df.drop_duplicates(subset='Item', keep='last')

ID      Item
2        5
3        1
3        2
4        3
4        4
4        6
4        7

你们对我该怎么做有什么想法吗?

非常感谢。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    好的,从数据框中的列中删除重复项不是问题。您的问题描述性不够,无法帮助我更快地提出解决方案。 看问题如下:

    给定四组数据(数据框中的 ID)。每个集群包含一组项目(您在数据框中的项目)。

    集群 1) (1,1), (1,2)

    簇 2) (2,2),(2,3),(2,4),(2,5)

    集群 3) (3,1),(3,2),(3,3)

    集群 4) (4,3),(4,4),(4,6),(4,7)

    考虑到最终数据帧不得包含相同的项目(您已指示为重复项)这一事实,我们应该在最终数据帧中的每个集群中至少包含一个项目。 清楚吗?

    示例:从集群一开始,将两个项目放入数据框中。 (1,1)(1,2)

    从簇 2 中,放入项目 3、4、5,它们分别是 (2,3)、(2,4)、(2,5)

    但是,当您看到集群 3 时,您可能会注意到您已经在最终数据框中包含来自该集群的项目(第一个集群中的项目 1 和 2)和(第二个集群中的项目 3)。但是,就您应该考虑每个集群中的至少一个项目而言,您可以从集群 2 中删除项目 3,并将集群 3 中的项目 3 放入最终数据框中。 (这就是重点)让我们选择(3,3)

    从第 4 组中,您可以获取 (4,4),(4,6),(4,7) 项。

    现在,python 专家可以帮助我们了解如何在 python 中有效地编写它以自主找到解决方案。

    【讨论】:

    • 非常感谢。事实上,你比我更清楚地表达了这个问题,也许我更专注于解释它的技术方面,而忘记了看问题的上层以及如何更好地与观众交流。
    • 感谢您的反馈,我建议您编辑帖子中的问题描述,以免其他人在遇到您的问题时感到困惑。
    • 好喊@Navid,我将对其进行编辑以更好地反映问题所在,如果您同意的话,我可能会使用您在上面的部分文字?
    • 当然,使用任何你想要的部分都没问题
    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 2023-03-16
    • 2016-12-29
    • 2020-06-23
    • 1970-01-01
    • 2012-03-23
    • 2017-03-30
    相关资源
    最近更新 更多