2017-01-23 3 views
2

私はカラムが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つの製品を持つことができないので、最も一般的な製品ペアでなければなりません。

答えて

4

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) 
+0

私はそれが2つの以上の製品グループのために調べる必要があります。データセットをこれに変更する必要があります。 'ID製品 1 [ '、 'B'、 'E'] 2 ['、 'B'、 'E'] 3 [ 'C'、 'D'] 4 [」 「['a'、 'b'、 'e'] 'が最も人気のあるものとして見つかるはずです –

+0

あなたの投稿にはどこにも言及されていませんでした。あなたは「ペア」という言葉を強調し続けていたので、あなたはペアワイズの組み合わせに従ってグループ化し、最大のカウントを持つペアを取ると仮定しました。新しい基準は何でしょうか? –

+0

私はお詫び申し上げますが、ペアワイズの比較である必要はありません。基本的には、大部分の人が選択した製品群でなければなりません。それは他の言葉それは3,4,5などになることができます –

関連する問題