Измените формат фрейма данных pandas из столбца в уникальный индекс

#python #python-3.x #pandas

Вопрос:

Я пытаюсь изменить свой фрейм данных, в котором я хочу Person , чтобы индекс был, однако как мне сделать так, чтобы индекс был уникальным? Я не знаю, нужны ли дубликаты в моем индексе.

 df = pd.DataFrame({'Person':['Paul','Paul','Paul','John','John','Mia'],'Score':[24,23,54,64,89,56],'Type':['A','C','F','A','G','X'],'Number':[1,2,3,1,2,1]})

df.set_index('Person',inplace = True)
 

Желаемый результат:

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

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

1. Можете ли вы подробнее рассказать о том, как вы хотите обрабатывать повторяющиеся значения. Вы хотите создать список значений, среднее значение, выбрать одно и т. Д.?

2. Сделать а reset_index() до set_index() и потом set_index(['Person', 'index']) ?

3. Я просто хочу вставить столбец Person в индекс, но когда я его устанавливаю, появляются дубликаты, я просто хочу, чтобы для этой группы было 1 значение индекса. Я показал это на картинке выше.

4. Да, но у вас есть 3 балла для Пола, как эти баллы должны быть объединены? Или им следует держаться порознь?

5. Если Number уникален под каждым человеком, то сделайте мультииндекс на Person и Number ?

Ответ №1:

Если вы просто хотите удалить повторяющиеся значения из индекса, используйте:

 df = df.set_index('Person')
df.index = np.where(df.index.duplicated(), '', df.index) 
 

Ответ №2:

Вы можете создать a MultiIndex , сохранив предыдущий числовой индекс в качестве второго уровня:

 df.set_index(['Person', df.index], inplace=True)
df
 
             Score   Type    Number
Person              
Paul    0   24      A       1
        1   23      C       2
        2   54      F       3
John    3   64      A       1
        4   89      G       2
Mia     5   56      X       1
 

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