#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)