【问题标题】:Find the most common pairs in a Dataframe of lists在列表的数据框中查找最常见的对
【发布时间】:2017-06-07 18:07:41
【问题描述】:

我有一个包含ID, Product 列的数据框。例如,

ID  Product
1   ['a','b']
2   ['a','b','e']
3   ['c','d']
4   ['a','b','c','d']

Product 是一个列表字段,其中每个列表都包含一个人拥有的产品。例如,ID 1 的人拥有产品ab。我需要找到最流行/最常见的产品对。在此示例中,产品[a,b] 最受欢迎。它必须是最常见的产品对,因为没有人可以拥有 1 个产品。

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    1) 使用itertools.combinations 获取所有可能的对组合,并将生成的系列转换为其列表表示形式,稍后需要将其提供给数据帧构造函数。

    2) 堆叠DF 并获取各自的Series.value_counts()。使用Series.idxmax() 获取计数最高的索引。


    import itertools
    
    comb = lambda x: list(itertools.combinations(x, 2))
    L = df['Product'].map(comb).tolist()
    pd.DataFrame(L).stack().value_counts(sort=False).idxmax()
    Out[21]:
    ('a', 'b')
    

    编辑:(基于说明新要求的评论)

    a, cnt = np.unique(df.Product.values, return_counts=True)
    a[cnt==cnt.max()]
    array([['a', 'b', 'e']], dtype=object)
    

    【讨论】:

    • 我需要它来查找超过 2 个产品组。如果数据集更改为此。 ID Product 1 ['a','b','e'] 2 ['a','b','e'] 3 ['c','d'] 4 ['a','b','c','d'] 一定会找到['a','b','e'] 最受欢迎的
    • 嗯,你的帖子中没有提到。你一直在强调“对”这个词,所以我假设你是根据它们的成对组合进行分组,并取最大数量的对。新标准是什么?
    • 抱歉,不必成对比较。基本上,它必须只是大多数人选择的一组产品。换句话说,它可以是 3、4、5 等。
    • 我想你想知道产品之间的关联。为此,您可以使用 Apriori 算法或其他关联规则学习算法。
    • @JavaBeginner:您能否编辑您的帖子,对您真正想要实现的目标进行清晰简单的解释?此外,我更新了我的帖子以适应新包含的数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2011-10-27
    • 2010-12-03
    相关资源
    最近更新 更多