2015-04-26 4 views
6

Ich habe ein Excel-Blatt, das wie so aussieht:GroupBy Ergebnisse Wörterbuch von Listen

Column1 Column2 Column3 
0  23  1 
1  5  2 
1  2  3 
1  19  5 
2  56  1 
2  22  2 
3  2  4 
3  14  5 
4  59  1 
5  44  1 
5  1  2 
5  87  3 

Und ich bin auf der Suche, dass die Daten zu extrahieren, Gruppe durch Spalte 1, und fügen Sie es, so dass es zu einem Wörterbuch scheint wie folgt aus:

{0: [1], 
1: [2,3,5], 
2: [1,2], 
3: [4,5], 
4: [1], 
5: [1,2,3]} 

Das ist mein Code

excel = pandas.read_excel(r"e:\test_data.xlsx", sheetname='mySheet', parse_cols'A,C') 
myTable = excel.groupby("Column1").groups 
print myTable 

jedoch so weit ist, wie dies meine Ausgabe sieht:

{0: [0L], 1: [1L, 2L, 3L], 2: [4L, 5L], 3: [6L, 7L], 4: [8L], 5: [9L, 10L, 11L]} 

Vielen Dank!

Antwort

5

Sie könnten groupby auf Column1 und dann Column3 zu apply(list) nehmen und to_dict anrufen?

In [81]: df.groupby('Column1')['Column3'].apply(list).to_dict() 
Out[81]: {0: [1], 1: [2, 3, 5], 2: [1, 2], 3: [4, 5], 4: [1], 5: [1, 2, 3]} 
+0

Das macht es sicherlich! Vielen Dank! – SuperDougDougy

+0

Bit bedeuten, diese Antwort zu akzeptieren, wenn @ EdChum ist identisch und wurde 3 Minuten zuvor veröffentlicht. – LondonRob

2

Nach the docs die GroupBy.groups:

ist ein dict deren Schlüssel die berechneten eindeutigen Gruppen und entsprechenden Werten wobei die Achse Etiketten zu jeder Gruppe gehören.

Wenn Sie die Werte selbst, können Sie groupby ‚Column1‘ und dann apply aufrufen und übergeben Sie die list Methode für jede Gruppe anzuwenden.

Sie können dann wandeln sie in einem dict nach Wunsch:

In [5]: 

dict(df.groupby('Column1')['Column3'].apply(list)) 
Out[5]: 
{0: [1], 1: [2, 3, 5], 2: [1, 2], 3: [4, 5], 4: [1], 5: [1, 2, 3]} 

(Anmerkung: einen Blick auf this SO question dafür, warum die Zahlen von L gefolgt sind)

+0

Vielen Dank für die Antwort! – SuperDougDougy

+0

@SuperDougDougy können Sie jetzt upvote ;-) – EdChum