Лучший способ установить мультииндекс в фрейме данных pandas

#python #pandas #indexing #multi-index

#python #pandas

Вопрос:

У меня есть фрейм данных с этими столбцами df :

 Group
Year
Gender
Feature_1
Feature_2
Feature_3
...
  

Я хочу использовать MultiIndex для стекирования данных позже, и я попробовал этот способ:

 df.index = pd.MultiIndex.from_arrays([df['Group'], df['Year'], df['Gender']])
  

Эта инструкция успешно создает мультииндекс для моего фрейма данных, но есть ли лучший способ, который также удаляет исходные столбцы?

Комментарии:

1. используйте df = df.set_index(['Group', 'Year', 'Gender'])

2. Спасибо, если вы могли бы написать это как ответ, я приму это как решение.

Ответ №1:

Индексирование в pandas проще, чем это. Вам не нужно создавать свой собственный экземпляр класса MultiIndex.

Фрейм данных pandas имеет вызываемый метод .set_index() , который принимает либо один столбец в качестве аргумента, либо список столбцов. Предоставление списка столбцов установит для вас мультииндекс.

Вот так:

 df.set_index(['Group', 'Year', 'Gender'], inplace=True)
  

Обратите inplace=True внимание на то, что я могу настоятельно рекомендовать.

Когда вы имеете дело с огромными фреймами данных, которые едва умещаются в памяти, операции на месте будут в два раза меньше вашего использования памяти.

Рассмотрим это:

 df2 = df1.set_index('column') # Don't do this
del df1 # Don't do this
  

Когда эта операция будет выполнена, использование памяти будет примерно таким же, как и раньше. Но только потому, что мы это делаем del df1 . За время между этими двумя командами будет две копии одного и того же фрейма данных, следовательно, двойная память.

Выполнение этого неявно то же самое:

 df1 = df1.set_index('column') # Don't do this either
  

И все равно потребуется двойная память для выполнения этого на месте.