Biến Pandas Multi-Index thành cột


155

Tôi có một khung dữ liệu với 2 cấp chỉ mục:

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

Mà tôi muốn biến thành thế này:

Trial    measurement       value

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

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

Tôi cần điều này bởi vì tôi muốn tổng hợp dữ liệu theo hướng dẫn ở đây , nhưng tôi không thể chọn các cột của mình như thế nếu chúng được sử dụng làm chỉ mục.


2
Sao y: stackoverflow.com/questions/18624039/ khăn Bạn muốn đề xuất đầu tiên. .reset_index()
TomAugspurger

1
cảm ơn rất nhiều, tôi thực sự đã tìm hiểu về vấn đề này rất nhiều, nhưng "tạo ra đa điểm thành cột" và các truy vấn tương tự luôn có cho tôi các chủ đề muốn xoay vòng các tệp dữ liệu của họ ...
TheChymera

3
Luôn luôn dễ dàng hơn để tìm câu trả lời khi bạn đã biết nó :)
TomAugspurger

Câu trả lời:


192

Các reset_index () là một phương pháp gấu trúc DataFrame rằng sẽ chuyển giao các giá trị chỉ số vào DataFrame như cột. Cài đặt mặc định cho tham số là drop = false (sẽ giữ các giá trị chỉ mục dưới dạng cột).

Tất cả bạn phải làm thêm .reset_index(inplace=True) sau tên của DataFrame:

df.reset_index(inplace=True)  

3
Đối với trường hợp của tôi, nơi tôi có 3 cấp chỉ mục, thiết lập lại tại chỗ không hoạt động. Thay thế là gán khung dữ liệu mới được đặt lại cho một khung dữ liệu mới: df2 = df.reset_index ()
Gorkem

8
Để chỉ đặt lại một cấp độ cụ thể, hãy sử dụngdf.reset_index(level=[...])
cs95

20

Điều này không thực sự áp dụng cho trường hợp của bạn nhưng có thể hữu ích cho những người khác (như bản thân tôi 5 phút trước) để biết. Nếu multindex của một người có cùng tên như thế này:

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

df.reset_index(inplace=True) sẽ thất bại, vì các cột được tạo không thể có cùng tên.

Vì vậy, sau đó bạn cần đổi tên multindex với df.index = df.index.set_names(['Trial', 'measurement'])để có được:

                           value
Trial    measurement       

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

Và sau đó df.reset_index(inplace=True)sẽ làm việc như một lá bùa.

Tôi đã gặp vấn đề này sau khi nhóm theo năm và tháng trên một cột thời gian (không phải chỉ mục) được gọi live_date, có nghĩa là cả năm và tháng được đặt tên live_date.


1
Làm thế nào để các giá trị Thử nghiệm của bạn lặp lại? Tôi đã có cùng một vấn đề và nó hoạt động ngoại trừ các giá trị của tôi không lặp lại.
Giàu

4

Như @ cs95 đã đề cập trong một nhận xét, để chỉ giảm một cấp, hãy sử dụng:

df.reset_index(level=[...])

Điều này tránh việc phải xác định lại chỉ số mong muốn của bạn sau khi đặt lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.