2016-03-30 11 views
1

geben habe ich einen Pandas Datenrahmen:Pandas groupby auf zwei Spalten keine richtigen Datenrahmen

 
+----------------+--+ 
| class name | | 
+----------------+--+ 
| 0  A a1 | | 
| 1  A a2 | | 
| 2  A a3 | | 
| 3  A a1 | | 
| 4  B b2 | | 
| 5  C c1 | | 
|    | | 
+----------------+--+ 

ich versuche, die Zählung der Spalte ‚Namen‘ in Bezug auf die Klasse zu erhalten. Ich war mit der groupby Funktion für diesen purpose.This der neue Datenrahmen ist ich suche:

 
+---------------------+--+ 
| class name Count | | 
+---------------------+--+ 
| A  a1  2 | | 
| A  a2  1 | | 
| A  a3  1 | | 
| B  b2  1 | | 
| C  c1  1 | | 
|      | | 
+---------------------+--+ 

ich die folgende Codezeile verwendet:

 
mydf.groupby(['class','name'])['name'].count() 
and got the following result: 

+------------------+--+ 
| class name | | 
+------------------+--+ 
| A  a1  2 | | 
|  a2  1 | | 
|  a3  1 | | 
| B  b2  1 | | 
| C  c1  1 | | 
|     | | 
+------------------+--+ 

Gibt es eine Möglichkeit, das beheben Spalte "Klasse"? Ich weiß, dass es genug Fragen gibt, um groupby Objekte in einen Datenrahmen zu konvertieren. Ich konnte keine Lösung für dieses Problem finden. Gibt es einen einfacheren Weg dies zu tun?

Jede Hilfe oder Richtung wird geschätzt. Vielen Dank!

+0

Dies zeigt Ihnen, wo die Zeilen die gleiche Klasse in der gruppierten Index haben, wenn Sie möchten, Zu wiederholende Klassenwerte rufen Sie dann 'reset_index()' auf, um die gruppierten Indexwerte als Spalte zurückzusetzen – EdChum

Antwort

0

können Sie verwenden reset_index mit Parameter name='count':

print mydf.groupby(['class','name'])['name'].count().reset_index(name='count') 
    class name count 
0  A a1  2 
1  A a2  1 
2  A a3  1 
3  B b2  1 
4  C c1  1 

Aber Aggregat size ist besser:

print mydf.groupby(['class', 'name']).size().reset_index(name='count') 
    class name count 
0  A a1  2 
1  A a2  1 
2  A a3  1 
3  B b2  1 
4  C c1  1 
+0

Vielen Dank! Bin dankbar. Das hat funktioniert –

+0

Wenn meine Antwort hilfreich war, vergiss nicht [akzeptiere] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) es nach dem Zeitlimit. Vielen Dank. – jezrael

Verwandte Themen