Для 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
Pandas set_levels в MultiIndex: значения уровней должны быть уникальными ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение