Есть ли способ переиндексировать строки во фрейме данных, содержащем дубликаты, таким образом, чтобы дубликаты также были переиндексированы?

#python #pandas #dataframe #reindex

Вопрос:

В настоящее время я работаю над проектом, в котором мне нужно проанализировать фрейм данных, содержащий данные обо всех кадрах, сделанных «Нью-Йорк Никс» в сезоне 2013-2014(~7000 строк). Первый столбец предназначен для идентификатора game_id, который является уникальным идентификатором для каждой из 82 игр, сыгранных за сезон. Первые 72 строки имеют идентификатор game_id, равный 0021300008. Следующие 85 строк предназначены для следующей игры с идентификатором 0021300018 и так далее. Я хочу переиндексировать все эти строки, чтобы вместо первого идентификатора game_id был 1, а вместо следующего-2 и т. Д. Я попытался рассмотреть варианты переиндексации для панд, но, похоже, не могу найти решение. У кого-нибудь есть какой-нибудь совет?

Спасибо.

Ответ №1:

Воспользуйся Series.rank .

 df['game_id'] = df['game_id'].rank(method='dense').astype(int)  

Другой вариант-создать словарь, который сопоставляет каждый уникальный «идентификатор игры» с 1, 2, 3 и т.д., И передает его Series.map

 # The game ids are mapped to 1, 2, 3, etc according to their order of appearance  # to do a rank-based mapping, use enumerate(df['game_id'].unique().sort_values()) idx_map = {idx: n for n, idx in enumerate(df['game_id'].unique())} df['game_id'] = df['game_id'].map(idx_map)