2013-08-02 11 views
8

Ho una serie panda indicizzati da tuple, come questo:serie panda fetta con elementi non nell'indice

from pandas import Series 
s = Series({(0, 0): 1, (0, 1): 2, (0, 3): 3, (1, 0): 1, (1, 2): 4, (3, 0): 5}) 

voglio tagliare un tale serie utilizzando gli indici che sono anche tuple (utilizzando ordinamento lessicografico) , ma non necessariamente nell'indice. Affettare sembra funzionare quando passo un indice che si trova sulla serie:

s[:(1,0)] 
(0, 0) 1 
(0, 1) 2 
(0, 3) 3 
(1, 0) 1 
dtype: int64 

ma se provo affettare da un indice che non è sulla serie c'è un errore:

s[:(1,1)] 
... 
ValueError: Index(...) must be called with a collection of some kind, 0 was passed 

Idealmente mi 'Mi piacerebbe ottenere gli elementi della serie indicizzati da (0, 0), (0, 1), (0, 3), (1, 0), simili a ciò che accade quando si affetta usando le date in TimeSeries. C'è un modo semplice per raggiungere questo obiettivo?

risposta

8

Questo funziona se si dispone di un MultiIndex piuttosto che un indice di tuple:

In [11]: s.index = pd.MultiIndex.from_tuples(s.index) 

In [12]: s 
Out[12]: 
0 0 1 
    1 2 
    3 3 
1 0 1 
    2 4 
3 0 5 
dtype: int64 

In [13]: s[:(1,1)] 
Out[13]: 
0 0 1 
    1 2 
    3 3 
1 0 1 
dtype: int64 

In una modifica precedente avevo suggerito che questo potrebbe essere a bug, e avevano creato un mod terribile ...

+0

Fantastico, grazie per il tuo aiuto! – Javier

+0

(Eviterei la tua risposta ma non ho abbastanza rep per) – Javier

Problemi correlati