2016-08-05 16 views
2

Dies ist ein Follow-up ist Frage get first and last values in a groupbyDrop erste und die letzte Zeile aus jeder Gruppe

Wie melde ich mich von ersten und letzten Reihen innerhalb jeder Gruppe?

Ich habe dieses df

df = pd.DataFrame(np.arange(20).reshape(10, -1), 
        [['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'], 
        ['a', 'a', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']], 
        ['X', 'Y']) 

df 

I absichtlich die zweite Reihe den gleichen Indexwert wie die erste Zeile vorgenommen. Ich werde die Einzigartigkeit des Index nicht kontrollieren können.

 X Y 
a a 0 1 
    a 2 3 
    c 4 5 
    d 6 7 
b e 8 9 
    f 10 11 
    g 12 13 
c h 14 15 
    i 16 17 
d j 18 19 

ich diesen

 X Y 
a b 2.0 3 
    c 4.0 5 
b f 10.0 11 

Weil beide Gruppen auf Stufe 0 gleich ‚c‘ wollen und ‚d‘ haben weniger als 3 Zeilen, alle Zeilen sollten gelöscht werden.

Antwort

3

würde ich eine ähnliche Technik anwenden, was ich für die andere Frage war:

def first_last(df): 
    return df.ix[1:-1] 

df.groupby(level=0, group_keys=False).apply(first_last) 

enter image description here

0

Hinweis: in Pandas Version 0.20.0 und höher, ix ist deprecated und die Verwendung von Iloc wird stattdessen ermutigt.

Also die df.ix[1:-1] sollte durch df.iloc[1:-1] ersetzt werden.