2017-01-23 6 views
2

Ich habe einen Datenrahmen mit Spalten ID, Product. Beispiel:Finden am häufigsten in Dataframe von Listen

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

Das Produkt ist ein Listenfeld, in dem jede Liste die Produkte enthält, die eine Person besitzt. Zum Beispiel hat eine Person mit ID 1 die Produkte a und b. Ich muss die beliebtesten/häufigsten Produktpaare finden. In diesem Beispiel sind die Produkte [a, b] am beliebtesten. Es müssen die häufigsten Produktpaare sein, da keine Person ein Produkt haben kann.

Antwort

4

1) Verwenden Sie itertools.combinations, um alle möglichen Kombinationen von Paaren zu erhalten, und konvertieren Sie die resultierende Serie in ihre Listenrepräsentation, die später einem Datenrahmenkonstruktor zugeführt werden muss.

2) Stapeln Sie die DF und nehmen Sie Series.value_counts(). Besorgen Sie sich den Index mit der höchsten Anzahl unter Verwendung von 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') 

Edit: (basierend auf Kommentar eine neue Anforderung unter Angabe)

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

Ich brauche es für mehr als 2 Produkte Gruppen zu suchen. Sollte sich der Datensatz zu diesem ändern. 'ID Produkt 1 [ 'a', 'b', 'e'] 2 [ 'a', 'b', 'e'] 3 [ 'c', 'd'] 4 [‘ a ',' b ',' c ',' d '] ' Es muss' [' a ',' b ',' e '] 'als das beliebteste finden –

+0

Nun, das war nirgends in Ihrem Beitrag erwähnt . Du hast immer wieder das Wort "Paare" betont, also habe ich angenommen, dass du nach ihren paarweisen Kombinationen gruppierst und das Paar mit der maximalen Anzahl nimmst. Was wäre das neue Kriterium? –

+0

Ich entschuldige mich, es muss kein paarweiser Vergleich sein. Grundsätzlich muss es sich nur um eine Produktgruppe handeln, die die Mehrheit der Menschen ausgewählt hat. Mit anderen Worten, es kann 3,4,5 usw. sein. –

Verwandte Themen