2016-06-27 32 views
6

In un datagramma panda multi index Desidero accedere allo ultimo elemento del secondo indice per tutti i valori del primo indice. Il numero di livelli nel secondo indice varia in base al valore del primo indice. Ho passato il pandas multi index documentation ma non ho trovato nulla che lo faccia.Accesso agli ultimi elementi del livello multiindex interno in pda dataframe

Ad esempio, per la cornice di dati di seguito:

arrays = [ ['bar', 'bar', 'baz', 'foo', 'foo', 'foo', 'qux'], 
      ['one', 'two', 'one', 'one', 'two', 'three', 'one']] 
tuples = list(zip(*arrays)) 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 
df = pd.DataFrame(np.random.randn(7, 3), index=index, columns=['A', 'B', 'C']) 
df 
       A   B   C 
first second 
bar one  0.289163 -0.464633 -0.060487 
     two  0.224442 0.177609 2.156436 
baz one -0.262329 -0.248384 0.925580 
foo one  0.051350 0.452014 0.206809 
     two  2.757255 -0.739196 0.183735 
     three -0.064909 -0.963130 1.364771 
qux one -1.330857 1.881588 -0.262170 

voglio ottenere:

    A   B   C 
first second 
bar two  0.224442 0.177609 2.156436 
baz one -0.262329 -0.248384 0.925580 
foo three -0.064909 -0.963130 1.364771 
qux one -1.330857 1.881588 -0.262170 

Il dataframes sto lavorando con hanno più 10M linee in modo voglio evitare loop esplicito.

+0

si potrebbe fare 'df.groupby (livello = 'prima') ultima()' – EdChum

risposta

6

Usa groupby con tail:

print (df.groupby(level='first').tail(1)) 
        A   B   C 
first second        
bar two  0.053054 -0.555819 0.589998 
baz one -0.868676 1.293633 1.339474 
foo three 0.407454 0.738872 1.811894 
qux one -0.346014 -1.491270 0.446772 

perché last perso level second:.

print (df.groupby(level='first').last())   
       A   B   C 
first        
bar 0.053054 -0.555819 0.589998 
baz -0.868676 1.293633 1.339474 
foo 0.407454 0.738872 1.811894 
qux -0.346014 -1.491270 0.446772