2016-11-08 6 views
2

Ich lerne gerade Pandas kennen und ich komme über ein konzeptionelles Problem nicht hinaus. Mein Datenrahmen ist wie folgt:min() Operation auf verschachtelten groupby in Pandas

df=pd.DataFrame({'ANIMAL':[1,1,1,1,1,2,2,2], 
      'AGE_D' : [3,6,47,377,698,1,9,241], 
      'AGE_Y' : [1,1,1,2,2,1,1,1]}) 

würde Ich mag eine verschachtelte Gruppe innerhalb Tieres und age_y tun und dann die Minuten auf der Untergruppe auswählen. gewünschte Ausgabe wäre dann:

ANIMAL AGE_Y AGE_D 
1  1  3 
1  2  377 
2  1  1 

Ich kann dies tun, ohne im Tiere nisten, z.B. wenn meine df2 = Teilmenge für ANIMAL = 1 dann

df2.loc[df2.groupby('AGE_Y')['AGE_D'].idxmin()] 

Aber all das, was ich mit Verschachtelung das Tier in der Gruppe versucht, von were unsuccesful. Ich vermute, dass meine Reihenfolge der Operationen falsch ist ... Wie soll ich darüber gehen?

+0

Dupe: http://stackoverflow.com/questions/23394476/keep-other-columns-when-using- min-with-groupby im Grunde der einzige Unterschied ist, dass Sie auf mehrere Spalten gruppieren möchten – EdChum

+0

Nachdem ich die Lösung gesehen habe, kann ich sehen, wie das ähnlich ist, aber wenn Sie es nicht wissen, ist es nicht so einfach abzuleiten. Ich habe tatsächlich den von Ihnen geposteten Thread angesehen, stolperte jedoch mit der verschachtelten Gruppierung. – branwen85

+0

Grundsätzlich die Sache, die hier zu beachten ist, dass Sie auf mehreren Spalten gruppieren können, die wie der Schritt aussieht, den Sie hier vermissten – EdChum

Antwort

2

Ich glaube, Sie Spalten groupby hinzufügen müssen - Gruppe von Spalten ANIMAL und AGE_Y:

df = df2.loc[df2.groupby(['ANIMAL','AGE_Y'])['AGE_D'].idxmin()] 
df = df[['ANIMAL','AGE_Y','AGE_D']] 
print (df) 
    ANIMAL AGE_Y AGE_D 
0  1  1  3 
3  1  2 377 
5  2  1  1 
+0

Vielen Dank! Ich denke, ich war wirklich nah (und doch so weit ...). Das funktioniert ein Vergnügen. – branwen85