2013-08-02 33 views
8

Tôi có một loạt gấu trúc được lập chỉ mục bởi các bộ, như thế này:Slice loạt gấu trúc với các yếu tố không nằm trong chỉ số

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

Tôi muốn cắt một loạt ví dụ bằng cách sử dụng các chỉ số đó cũng có các bộ (sử dụng thứ tự tự từ điển) , nhưng không nhất thiết trong chỉ mục. Cắt lát dường như làm việc khi tôi vượt qua một chỉ số đó là trên series:

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

nhưng nếu tôi cố gắng cắt bởi một chỉ số mà không phải là trên series có một lỗi:

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

Lý tưởng nhất là tôi muốn lấy các phần tử chuỗi được lập chỉ mục bởi (0, 0), (0, 1), (0, 3), (1, 0), tương tự như những gì xảy ra khi cắt sử dụng ngày trong TimeSeries. Có cách nào đơn giản để đạt được điều này?

Trả lời

8

này hoạt động nếu bạn có một MultiIndex chứ không phải là một chỉ số của các bộ:

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 

Trong một chỉnh sửa trước đó tôi đã đề nghị này có thể là a bug, và đã tạo ra một hack khủng khiếp ...

+0

Tuyệt vời, cảm ơn sự giúp đỡ của bạn! – Javier

+0

(Tôi muốn đưa ra câu trả lời của bạn nhưng không có đủ đại diện) – Javier

Các vấn đề liên quan