Xác định lại chỉ mục trong đối tượng Pandas DataFrame


84

Tôi đang cố lập chỉ mục lại một con gấu trúc DataFrame đối tượng , giống như vậy,

From:
            a   b   c
        0   1   2   3
        1  10  11  12
        2  20  21  22

To :
           b   c
       1   2   3
      10  11  12
      20  21  22

Tôi đang đi về điều này như được hiển thị bên dưới và nhận được câu trả lời sai. Bất kỳ manh mối về cách làm điều này?

>>> col = ['a','b','c']
>>> data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
>>> data
    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22
>>> idx2 = data.a.values
>>> idx2
array([ 1, 10, 20], dtype=int64)
>>> data2 = DataFrame(data,index=idx2,columns=col[1:])
>>> data2
     b   c
1   11  12
10 NaN NaN
20 NaN NaN

Bất kỳ ý tưởng tại sao điều này đang xảy ra?


1
bởi vì bạn đang sử dụng DF đầu tiên để tạo thứ hai, điều này sẽ chỉ nhận được các hàng nơi idx2 giao với data.index, tức là. hàng 1
RuiDC

Câu trả lời:


188

Tại sao bạn không sử dụng set_indexphương pháp đơn giản ?

In : col = ['a','b','c']

In : data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)

In : data
Out:
    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22

In : data2 = data.set_index('a')

In : data2
Out:
     b   c
a
1    2   3
10  11  12
20  21  22

17
Để xoá tên chỉ số, như trong ví dụ ban đầu: data2.index.name = None
Daniele

5

Nếu bạn không muốn 'a' trong chỉ mục

Trong :

col = ['a','b','c']

data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)

data

Ngoài:

    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22

Trong :

data2 = data.set_index('a')

Ngoài:

     b   c
a
1    2   3
10  11  12
20  21  22

Trong :

data2.index.name = None

Ngoài:

     b   c
 1   2   3
10  11  12
20  21  22

1
Out thứ hai là không đúng. Hiện vẫn còn một cột giấu tên ở bên trái chứa 0, 1, 2.
Yster
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.