Например, у меня есть тысячи строк с одним из его столбцов «cow_ID», где каждый идентификатор коровы имеет несколько строк. Я хочу заменить эти идентификаторы номерами, начинающимися с 1, чтобы их было легче запомнить.

df['cow_id'].unique().tolist()

В результате чего:

 5603,
 5606,
 5619,
 4330,
 5587,
 4967,
 5554,
 4879,
 4151,
 5501,
 4723,
 4908,
 3963,
 4023,
 4573,
 3986,
 5668,
 4882,
 5645,
 5548

Как мне изменить каждый уникальный идентификатор на новый номер, такой как:

5603 -> 1
5606 -> 2
0
npm 10 Июл 2019 в 06:09

2 ответа

Лучший ответ

Попробуй посмотреть на

df.groupby('cow_id').ngroup()+1

Или попробуйте pd.factorize:

pd.factorize(df['cow_id'])[0]+1

Как и в документации, pd.factorize кодирует объект как перечислимый тип или категориальную переменную.

Обратите внимание, что есть две возвращаемые переменные pd.factorize

3
Mohit Motwani 10 Июл 2019 в 03:36

Вот результат использования pandas.Categorical. Преимущество заключается в том, что вы сохраняете исходные данные и можете переворачивать их туда и обратно. Здесь я создаю переменную с именем «c», которая содержит как исходные категории, так и новые коды.

enter image description here

1
Gustavo Gradvohl 10 Июл 2019 в 03:54