我有一个包含ID, Product
列的数据框。例如,
ID Product
1 ['a','b']
2 ['a','b','e']
3 ['c','d']
4 ['a','b','c','d']
Product
是一个列表字段,其中每个列表包含一个人拥有的产品。例如,ID
1的人拥有产品a
和b
。我需要找到最受欢迎/最常见的产品对。在此示例中,产品[a,b]
是最受欢迎的。它必须是最常见的产品对,因为没有人可以拥有1种产品。
答案 0 :(得分:5)
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)