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