#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. Оба примера создают мультииндекс, но вопрос заключался в наличии независимых индексов