2013-08-02 17 views
8

Mam serię pandy indeksowane przez krotki, na przykład:Kawałek seria pandy z nie elementów w indeksie

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

chcę pokroić taką serię za pomocą indeksów, które są również krotki (stosując leksykograficzny zamówieniu) , ale niekoniecznie w indeksie. Odcinanie wydaje się działać, gdy mijam indeks, który jest na serii:

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

ale gdy próbuję krojenie przez wskaźnik, który nie jest na serii jest błąd:

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

Idealnie I "Chciałbym, aby elementy serii były indeksowane przez (0, 0), (0, 1), (0, 3), (1, 0), podobnie do tego, co dzieje się podczas krojenia z wykorzystaniem dat w TimeSeries. Czy istnieje prosty sposób, aby to osiągnąć?

Odpowiedz

8

To działa, jeśli masz MultiIndex zamiast indeksu krotek:

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 

w poprzedniej edycji I zasugerował to może być a bug i stworzył okropny siekać ...

+0

Niesamowite, dziękuję za pomoc! – Javier

+0

(Przekazałbym twoją odpowiedź, ale nie mam wystarczającej liczby powtórzeń) – Javier

Powiązane problemy