#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я хотел бы иметь уникальное значение индекса вместо того, чтобы повторять одно и то же много раз.
Пример: у меня есть этот фрейм данных:
test = pd.DataFrame({'id': ['a','a','a','a','b'],
'col_1': [1,2,3,4,5],
'col_2': [6,7,8,9,10]
})
id col_1 col_2
0 a 1 6
1 a 2 7
2 a 3 8
3 a 4 9
4 b 5 10
И чего я хочу добиться, так это иметь столбец id в качестве индекса, а не повторяться. Я пробовал это, но, как вы можете видеть, индекс повторяется в каждой строке:
test.set_index('id')
col_1 col_2
id
a 1 6
a 2 7
a 3 8
a 4 9
b 5 10
И чего я хотел бы достичь, это (индекс ‘a’ для всей группы из 4 значений и т.д.):
col_1 col_2
id
a 1 6
2 7
3 8
4 9
b 5 10
Есть идеи, как это сделать?
Заранее спасибо.
Ответ №1:
Вы можете установить id
столбец в качестве индекса. Чтобы избежать дублирования записей индекса, также установите индекс в качестве второго уровня результирующего мультииндекса.
test.set_index(['id', test.index])
# Out:
col_1 col_2
id
a 0 1 6
1 2 7
2 3 8
3 4 9
b 4 5 10
Если вы действительно не хотите иметь уровень индекса без дублирования, просто установите id
в качестве индекса. Но имейте в виду, что в этом случае отображаемый формат pandas будет включать дубликаты:
test.set_index('id')
# Out:
col_1 col_2
id
a 1 6
a 2 7
a 3 8
a 4 9
b 5 10
Также test.set_index('id').index.duplicated().any()
приведет True
к типичным неоптимальным последствиям для индексов, содержащих дубликаты.
Ответ №2:
Если хотите заменить дублированные значения на ''
для отображения, но лучше дублировать значения индекса, если потребуется более поздняя обработка:
df = test.set_index('id')
df1 = df.set_index(df.index.where(~df.index.duplicated(), ''))
print (df1)
col_1 col_2
id
a 1 6
2 7
3 8
4 9
b 5 10