#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
И все равно потребуется двойная память для выполнения этого на месте.