Измените все значения индекса кадра данных pandas на диапазон

У меня есть фрейм данных pandas, для которого я установил индекс как один из столбцов (frame_number), как таковой:

              pedestrian_ID      pos_x     pos_y       v_x       v_y
frame_number                                                        
780.0                   1.0   8.456844  3.588066  1.671714  0.176292
786.0                   1.0   9.125530  3.658583  1.662877  0.326723
792.0                   1.0   9.787146  3.849445  1.683334  0.371084
798.0                   1.0  10.472197  3.955450  1.598568  0.264795
804.0                   1.0  11.066000  4.061280  1.574526  0.456390
...                     ...        ...       ...       ...       ...
12381.0                 357.0  10.449366  6.229233  0.596406  0.066591
12381.0                 367.0  11.201661  8.443910  0.000000  0.000000

Теперь я хочу изменить значения индекса на диапазон (0, df['frame_number'].unique()) (от 0 до количества уникальных значений индекса, 'frame_number') как таковой:

              pedestrian_ID      pos_x     pos_y       v_x       v_y
frame_number                                                        
0                   1.0   8.456844  3.588066  1.671714  0.176292
1                   1.0   9.125530  3.658583  1.662877  0.326723
2                   1.0   9.787146  3.849445  1.683334  0.371084
3                   1.0  10.472197  3.955450  1.598568  0.264795
4                   1.0  11.066000  4.061280  1.574526  0.456390
...                     ...        ...       ...       ...       ...
1447                357.0  10.449366  6.229233  0.596406  0.066591
1448                367.0  11.201661  8.443910  0.000000  0.000000

Для приведенного выше конкретного примера, поскольку я знаю, что наименьшее значение для frame_number равно 780 и что каждое последующее frame_number увеличивается на 6, я могу сделать это:

df.index = (df.index - 780).astype(int) // 6

Чтобы сделать это в более общем виде (если мой индексированный столбец не подчиняется такому шаблону), я могу сделать:

d = {frame: i for i, frame in enumerate(df['frame_number'].unique())}
df.index = np.array([d[frame] for frame in df.index])

Есть ли лучший способ сделать это, желательно в пандах?

Просто чтобы быть более ясным, я не хочу поглощать индекс обратно в фрейм данных, как это сделал бы df.reset_index(), а хочу сохранить индекс, но изменить его значения на диапазон.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
505
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете преобразовать свой индекс в pandas Категориальный, а затем заменить свой индекс кодами категорий:

df.index = pd.Categorical(df.index).codes

Спасибо, это решение - ловкий трюк.

Erica 14.12.2020 06:23

Другие вопросы по теме