2017-01-23 2 views
2

열이 ID, Product 인 데이터 프레임이 있습니다. 예 :목록의 데이터 프레임에서 가장 공통점 찾기

ID Product 
1 ['a','b'] 
2 ['a','b','e'] 
3 ['c','d'] 
4 ['a','b','c','d'] 

제품은 각 제품에 사람이 가지고있는 제품이 들어있는 필드입니다. 예를 들어 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') 



편집 : 내가 2 개 이상의 제품 그룹을 찾기 위해 필요

a, cnt = np.unique(df.Product.values, return_counts=True) 
a[cnt==cnt.max()] 
array([['a', 'b', 'e']], dtype=object) 
+0

(새로운 요구 사항 서술 코멘트 기준). 데이터 세트가 이렇게 변경되어야합니다. 'ID 제품 1'A ','B ','E '] 2'A ','B ','E '] 3'C ','D '] 4' '['a ','b ','e ']'는 (는) 가장 인기있는 것으로 찾아야합니다. –

+0

글쎄, 그건 당신의 게시물에서 언급되지 않았습니다. . 당신은 "쌍"이라는 단어를 계속 강조 했으므로 나는 당신이 쌍의 조합에 따라 그룹화하고 최대 개수를 갖는 쌍을 취한다고 가정했습니다. 새로운 기준은 무엇입니까? –

+0

죄송 합니다만, 쌍으로 비교할 필요는 없습니다. 기본적으로 대부분의 사람들이 선택한 제품 그룹이어야합니다. 다른 말로는 3,4,5 등이 될 수 있습니다. –

관련 문제