Перевизначення індексу в об’єкті Pandas DataFrame


84

Я намагаюся повторно індексувати об'єкт pandas DataFrame, ось так,

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

Я роблю це, як показано нижче, і отримую неправильну відповідь. Будь-які підказки про те, як це зробити?

>>> 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

Будь-яка ідея, чому це відбувається?


1
оскільки ви використовуєте 1-й DF для побудови другого, це отримає лише ті рядки, де idx2 перетинає data.index, тобто. рядок 1
RuiDC

Відповіді:


188

Чому ви просто не використовуєте set_indexметод?

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
Для того, щоб видалити ім'я індексу, як в оригінальному прикладі: data2.index.name = Немає
Даніеле

5

Якщо ви не хочете "a" в індексі

В:

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

В:

data2 = data.set_index('a')

Вийшов:

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

В:

data2.index.name = None

Вийшов:

     b   c
 1   2   3
10  11  12
20  21  22

1
Другий вихід неправильний. Зліва все ще є безіменна колонка, що містить 0, 1, 2.
Істер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.