2013-11-20 27 views
6

Tôi có một khung thời gian dataframe và tôi muốn reindex nó bằng thử nghiệm và đo lường.Reindex sublevel của pandas dataframe multiindex

giản, tôi có điều này:

   value 
Trial   
    1  0  13 
      1   3 
      2   4 
    2  3  NaN 
      4  12 
    3  5  34 

Mà tôi muốn chuyển thành này:

    value 
Trial  
    1  0  13 
      1   3 
      2   4 
    2  0  NaN 
      1  12 
    3  0  34 

Làm thế nào tôi tốt nhất có thể làm được điều này?

Trả lời

7

Mới hôm qua, Andy Hayden nổi tiếng đã thêm tính năng này vào phiên bản 0.13 của gấu trúc, sẽ được phát hành vào bất kỳ ngày nào. Xem here để biết ví dụ về cách sử dụng mà anh đã thêm vào tài liệu.

Nếu bạn thấy thoải mái khi cài đặt phiên bản phát triển của gấu trúc từ nguồn, bạn có thể sử dụng ngay bây giờ.

df['Measurements'] = df.reset_index().groupby('Trial').cumcount() 

Mã sau đây tương đương, nếu ít pithy và sẽ hoạt động trên bất kỳ phiên bản nào gần đây của gấu trúc.

grouped = df.reset_index().groupby('Trial') 
df['Measurements'] = grouped.apply(lambda x: Series(np.arange(len(x)), x.index)) 

Cuối cùng, df.set_index(['Trial', 'Measurements'], inplace=True) để nhận kết quả mong muốn.

+4

haha! "lừng lẫy" +1;) (Lưu ý: cumcount cũng làm việc với chỉ số song song, nhưng "tương đương" không ... Tôi hơi chút táo bạo trong tài liệu và nói "* về cơ bản * tương đương": p) –

+0

nếu Chỉ số của tôi không được gọi ('số đo') - nhưng không có tên nào cả? – TheChymera

+1

Các mức chỉ mục chưa đặt tên có thể được chỉ định bằng từ khóa '' level'', như '' groupby (level = 1) ''. –

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