2013-08-02 7 views
8

ich eine Pandas Reihe von Tupeln indiziert haben, wie folgt aus:Scheibe Pandas Serie mit Elementen nicht im Index

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

I unter Verwendung von Indizes, eine solche Reihe schneiden wollen, die auch Tupel (lexikographische Ordnung verwendet wird) , aber nicht unbedingt im Index. Slicing scheint zu funktionieren, wenn ich einen Index übergeben, die an der Reihe ist:

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

aber wenn ich Slicing durch einen Index versuchen, das nicht auf der Reihe ist, gibt es einen Fehler:

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

Ideale I Ich möchte die Reihenelemente durch (0, 0), (0, 1), (0, 3), (1, 0) indiziert bekommen, ähnlich wie beim Schneiden mit Daten in TimeSeries. Gibt es einen einfachen Weg, dies zu erreichen?

Antwort

8

Dies funktioniert, wenn Sie einen Multiindex anstatt einen Index von Tupeln haben:

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 einem früheren bearbeiten ich dies vorgeschlagen hatte a bug sein könnte, und hatte eine schreckliche Hack erstellt ...

+0

Super, danke für deine Hilfe! – Javier

+0

(Ich würde Ihre Antwort auffrischen, aber nicht genug Rep zu haben) – Javier