Pandas set_levels в MultiIndex: значения уровней должны быть уникальнымиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pandas set_levels в MultiIndex: значения уровней должны быть уникальными

Сообщение Anonymous »

Для DataFrame df

Value
Category Pool Class
A 1.0 1.0 1
9.0 2
B 1.0 1.0 3
C 1.0 1.0 4
5.0 5


Я хочу преобразовать уровни Pool и Class в целые числа без сброса_index (см. ниже).
Я пробовал использовать комбинацию get_level_values и set_levels, вот так

for c in ['Pool', 'Class']:
df.index.set_levels(df.index.get_level_values(c).astype(int), level=c, inplace=True)


Однако это повышает

ValueError: Level values must be unique: [1, 1, 1, 1, 1] on level 1


Чтобы понять, что происходит, я также попробовал использоватьverify_integrity=False. Тогда

df.index.set_levels(df.index.get_level_values('Class').astype(int),
level='Class', verify_integrity=False, inplace=True)


производит

Value
Category Pool Class
A 1.0 1 1
1 2
B 1.0 1 3
C 1.0 1 4
9 5


тогда как моя цель — получить

Value
Category Pool Class
A 1.0 1 1
9 2
B 1.0 1 3
C 1.0 1 4
5 5


Как этого добиться правильно? Является ли объединение get_level_values и set_levels правильным способом? Почему pandas не может правильно установить уровень после его преобразования с помощью astype?

Думаю, вы могли бы работать с reset_index и set_index, но какая тогда польза от методов set_levels?

d = {'Category': str, 'Pool': int, 'Class': int}
df.reset_index(drop=False, inplace=True)
for k, v in d.items():
df[k] = df[k].astype(v)

df.set_index(list(d.keys()), inplace=True)


Подробнее здесь: https://stackoverflow.com/questions/529 ... -be-unique
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»