Возможно ли иметь несколько индексов в фрейме данных pandas?

#python #database #pandas #dataframe #indexing

#python #База данных #pandas #фрейм данных #индексирование

Вопрос:

Возможно ли иметь несколько индексов одновременно для одного фрейма данных pandas?

Под индексом я подразумеваю что-то близкое к тому, что базы данных SQL или MongoDB должны были бы резко повысить производительность некоторых запросов.

Представьте, что у вас есть фрейм данных заказов, и иногда вы хотели бы индексировать заказ по его идентификатору, а в другой раз индексировать заказ по другому ключу, скажем, складу, идентификатору клиента, времени, что-то в этом роде.

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

1. Да, вы можете использовать MultiIndex и запрос с IndexSlice. Или вы можете запросить подобное df.query('ClientID=10') или логическое индексирование: df[df['ClientID']==10]

Ответ №1:

Короткий ответ: Да.

Пожалуйста, обратитесь https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.set_index.html

 s = pd.Series([1, 2, 3, 4])
df.set_index([s, s**2])
      month  year  sale
1 1       1  2012    55
2 4       4  2014    40
3 9       7  2013    84
4 16     10  2014    31
  

Другой пример для множественного индекса:

 dct = {'id' : (0,0,1,1,2,2,3,3,4,4,5,5),
    'Store': ('A','A','A','A','A','A','B','B','B','C','C','C'),
       'code_num':('INC101','INC102','INC103','INC104','INC105','INC106','INC201','INC202','INC203','INC301','INC302','INC303'),
       'days':('4','18','9','15','3','6','10','5','3','1','8','5'),
       'products': ('remote','antenna','remote,antenna','TV','display','TV','display,touchpad','speaker','Cell','display','speaker','antenna')
}
df = pd.DataFrame(dct)
df.set_index(['id','Store','code_num'])
  

df :

введите описание изображения здесь

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

1. возможно ли, чтобы второй индекс был многоиндексным?

2. Ваш вопрос был: возможно ли иметь несколько индексов одновременно для одного фрейма данных pandas?

3. Да, но если я хочу иметь возможность индексировать двумя отдельными способами, как я описал в своем посте, где для первого способа требуется ключ только с одним элементом (идентификатор заказа), в то время как для второго способа требуется составной ключ (Склад идентификатор клиента время)), мне нужно было бы иметь два индекса, где первый является обычным индексом, а второй — мультииндексным. Имеет ли это смысл сейчас?

4. Обновлен пример

5. Оба примера создают мультииндекс, но вопрос заключался в наличии независимых индексов