Python 如何在分组数据帧上找到最常见的项组合?

Python 如何在分组数据帧上找到最常见的项组合?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有这样一个数据帧: pd.DataFrame([{"order_id": 1234, "product": "milk"}, {"order_id": 1234, "product": "butter"}, {"order_id": 4321, "product": "bread"}, {"order_id": 4321, "product": "milk"}, {"order_id":

我有这样一个数据帧:

pd.DataFrame([{"order_id": 1234, "product": "milk"},
              {"order_id": 1234, "product": "butter"},
             {"order_id": 4321, "product": "bread"}, 
             {"order_id": 4321, "product": "milk"},
             {"order_id": 4321, "product": "butter"},
             {"order_id": 1111, "product": "corn"},
             {"order_id": 1111, "product": "cereal"},
             {"order_id": 8888, "product": "milk"}])

    order_id    product
0   1234    milk
1   1234    butter
2   4321    bread
3   4321    milk
4   4321    butter
5   1111    corn
6   1111    cereal
7   8888    milk
我需要找到最常见的产品组合,而不必推断在这些组合中要放入多少产品

这个例子应该把牛奶和黄油作为最常一起购买的两种食品


我已尝试按订单id对它们进行分组,但找不到解决方案来获取组内的组合。

我们可以通过合并和groupby.size查找产品对:

给你

('butter', 'milk')
itertools.combinations和pandas.Series.mode 收款台 与上述答案类似,但使用计数器而不是pandas.Series.mode


使用groupby。它将为您提供不同的列表。是的,groupby为我提供了列表,但我需要选择最常见的组合,groupby['order_id','product']。size将仅为我提供分组的订单。我需要订单中的产品组合。这真的不清楚。你能说说你对样品清单的期望吗。我的意思是你期望你的组合是什么。如果问题要求所有的组合,那可能太难了。不过我们可以配对。@MEdwin在样本中我有两个不同的订单号,分别是牛奶和黄油,而且都含有两种ITEN。如果有人买牛奶,它可能也会买黄油,因为大多数含有牛奶的订单都有黄油。就这样,谢谢!比我想象的要复杂一点,但它能工作!这不是只返回配对吗?@rpanai OP在评论中说,配对现在就可以了。这看起来好多了!使用这种方法,我们是否可以删除组合中硬编码的项目数,并使用算法为我们推断它?
('butter', 'milk')
from itertools import combinations

pd.Series.mode([
    t for _, d in df.groupby('order_id').product
    for t in combinations(d, 2)
])

0    (milk, butter)
dtype: object
from itertools import combinations
from collections import Counter

Counter([
    t for _, d in df.groupby('order_id').product
    for t in combinations(d, 2)
]).most_common(1)

[(('milk', 'butter'), 2)]