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)]