2016-11-21 4 views
0

Ich habe eine Tabelle in Pandas dfKombinationen von Werten in Spalte Pandas Datenrahmen finden

id_x    id_y 
    a     b 
    b     c 
    c     d 
    d     a 
    b     a 
and so on around (1000 rows) 

Ich möchte die Gesamtkombinationen für jede ID_X mit id_y zu finden. etwas wie Verkettung

ie. a hat Kombinationen mit a-b,b-c,c-d ähnlich b hat combinations(b-c,c-d,d-a) and also a-b to be considered as a combination for b(a-b = b-a)

und einen Datenrahmen df2 schaffen, die

id combinations count 
a   b,c,d  3 
b   c,d,a  3 
c   d,a,b  3 
d   a,b,c  3 
and so on ..(distinct product_id_'s) 

hat und auch, wenn ich jede Kombinationen in einer anderen Spalte in Datenrahmen setzen könnte

id c1 c2 c3...&so on count 
a  b c d    3    
b  c d a    3 

was Ansatz sollte ich folgen? meine Fähigkeiten auf Python sind auf einem Anfänger-Level. Vielen Dank im Voraus.

+2

Sie müssen genauer angeben, was Sie tun möchten. Versuchen Sie auch, etwas Code dafür zu schreiben. –

+0

Es ist komplizierter - ich denke, Sie können alle Ausgangskombination aus Eingang hinzufügen - es ist ein bisschen unklar, was genau brauchen. Vielen Dank. – jezrael

+0

@jezrael kurz eine Verkettungsregel, 'wenn a-> b und b-> c und c-> d' also Ketten für a sollte haben 'a-> b, c, d' – Shubham

Antwort

1

Sie könnten versuchen, so etwas wie:

#generate dataframe  
pdf = pd.DataFrame(dict(id_x = ['a','b','c','d','b'], id_y = ['b', 'c', 'd', 'a', 'a'])) 

#generate second dataframe with swapped columns: 
pdf_swapped = pdf.rename(columns = dict(id_x= 'id_y', id_y= 'id_x')) 

#append both dataframes to each other 
pdf_doubled = pd.concat([pdf, dummy_pdf]) 

#evaluate the frequency of each combination: 
result = pdf_doubled.groupby('id_x').apply(lambda x: x.id_y.value_counts()) 

Dies ergibt folgendes Ergebnis:

a  b 2 
     d 1 
b  a 2 
     c 1 
c  b 1 
     d 1 
d  c 1 
     a 1 

Um herauszufinden, wie häufig die Kombination ab, können Sie einfach tun:

result['a', 'b'] 
+0

@ für Spalte' a' die Kombinationen sind "b und d", aber ich wollte "b, c und d" da 'a-> b und b-> c und c-> d also Ketten für a sollte haben a-> b, c, d ' – Shubham

+0

Ich verstehe. Wie sollen Schleifen wie a-> b, b-> c, c-> d, d-> a behandelt werden? –

Verwandte Themen