2017-11-01 1 views
2

Ich habe einen Datenrahmen des FormatsPandas nach mehreren Spalten gruppieren und die Ergebnisse in einer Tabelle als eine neue Spalte setzen

|Col1|Col2|Count|Day | 
|----|----|-----|-----| 
| A | C | 1 | Mon | 
| A | C | 3 | Tue | 
| A | C | 5 | Wed | 
| A | D | 7 | Mon | 
| B | C | 2 | Mon | 
| B | D | 4 | Tue | 

ich durch die ersten beiden Spalten gruppiert werden sollen, und ein Wörterbuch der Zählungen erstellen pro Tag als eine neue Spalte gruppieren die ursprünglichen Zeilen, und werfen Sie die ursprünglichen Count und Day Spalten. Ich möchte mein Ergebnis aussehen

|Col1|Col2|dateCounts     | 
|----|----|-----------------------------| 
| A | C |{"Mon":1, "Tue": 3, "Wed": 5}| 
| A | D |{"Mon":7}     | 
| B | C |{"Mon":2}     | 
| B | D |{"Tue":4}     | 

ich etwas tun könnte, um die Spalte zu jeder Zeile wie das Hinzufügen, fallen die Grafen und Tag Spalten und dann Duplikate fallen auf dem Rahmen, aber ich bin zu kämpfen um die zusätzlichen dateCounts auf immer Spalte, um gut zu funktionieren. Ist dies mit der Methode df.groupby(['Col1', 'Col2']).apply() möglich?

Antwort

2

Verwenden groupby + apply:

df.groupby(['Col1', 'Col2'])\ 
    .apply(lambda x: dict(zip(x.Day, x.Count))).reset_index(name='dateCounts') 

    Col1 Col2      dateCounts 
0 A C {'Wed': 5, 'Tue': 3, 'Mon': 1} 
1 A D      {'Mon': 7} 
2 B C      {'Mon': 2} 
3 B D      {'Tue': 4} 
+0

Ahh hatte ich so etwas, aber mir fehlte die 'zip', perfekt! – TheHCA

+0

@TheHCA Kein Problem! Gratuliere auch an 15 Repräsentanten, du kannst jetzt Antworten wählen ;-) –

+1

Tolle Antwort. +1 –

Verwandte Themen