2017-03-29 4 views
4

Ich habe eine Probe eines unter Datensatz (nur die ersten paar Zeilen zeigen, aber es gibt 193 Zeilen):Gruppiert groupby automatisch alle nicht numerischen Spalten in Pandas?

country,beer_servings,spirit_servings,wine_servings,total_litres_of_pure_alcohol,continent 
Afghanistan,0,0,0,0.0,Asia 
Albania,89,132,54,4.9,Europe 
Algeria,25,0,14,0.7,Africa 
Andorra,245,138,312,12.4,Europe 
Angola,217,57,45,5.9,Africa 
Antigua & Barbuda,102,128,45,4.9,North America 
... 

Als ich dies auszuführen: drinks.groupby('continent').head()

ich mit 30 Zeilen zurück einen Datenrahmen zu bekommen. Aber in diesen 30 Zeilen habe ich immer noch doppelte Namen für die continent. Zum Beispiel in dem Bild unten sehen Sie, dass Europe zweimal wiederholt wird (in den Zeilen 1 und 3):

enter image description here

ich nicht in der Lage bin zu verstehen, warum ich immer noch mit zwei Reihen mit dem gleichen Kontinent, wenn Ich gruppiere ursprünglich nach Kontinent?

In diesem Fall ist die groupby Operation auch Gruppierung durch die country, obwohl ich es nie in der groupby Funktion angegeben? Da ich in SQL weiß, sollten Sie eine Aggregatfunktion wie max, min, sum usw. verwenden. Aber in diesem Fall muss ich keine Aggregatfunktion übergeben, und ich bekomme das obige Ergebnis.

Antwort

3

Nein!

Was passiert ist, dass head ist eine Methode auf dem groupby Objekt und verhält sich ein wenig anders als pd.DataFrame.head.

Was die groupby version of head tut, gibt den Kopf jeder Gruppe zurück.

So können wir dies deutlicher sehen von 1 zum head Methode übergeben und senden Sie es die erste Zeile jeder Teilmenge

df.groupby('continent').head(1) 

enter image description here

2

drinks.groupby('continent').head([n=5]) gibt die ersten n Zeilen aus jeder Gruppe sehen, aber dann ordnet sie nach dem ursprünglichen Index um. Versuchen Sie, drinks.groupby('continent').head(1) anzurufen, und Sie werden sehen, dass nur ein Land von jedem Kontinent im Ergebnis enthalten ist.

+0

Aber indirekt ist es noch Gruppierung nach "Kontinent" und "Land", wenn ich keinen Parameter an den Kopf richtig gebe? Da es mehrere Reihen mit dem Kontinent als "Europa" gibt. – CapturedTree

+0

Das ist richtig. – DyZ

+0

Was ich gesagt habe, ist richtig? – CapturedTree