Преобразование строковых данных в числа (где строка всегда должна быть одним и тем же числом) с возможностью обратного преобразования

Я хотел бы создать решение для машинного обучения, прогнозируя предстоящие продажи для каждого продукта.

Набор данных содержит тысячи продуктов (которые представлены в виде строки, например, «Product_1_12345»).

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

Однако, поскольку это вызывало слишком много столбцов, я изучаю альтернативу. Что я хотел бы иметь:

Original_Product_ID      New_Product_ID
Product1_ABC                1
Product4_ABC                2
Product1_ABC                1
Another_Product             3
Product4_ABC                2

Цель состоит в том, чтобы присвоить каждой уникальной строке число. Но если у нас будет этот продукт позже, я хотел бы иметь тот же номер.

Позже я хотел бы преобразовать числа обратно в исходные ID продукта.

Кто-нибудь знает как это сделать? Словарь не выглядит решением, так как мне нужно заполнять его автоматически (а у меня тысячи товаров).

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

mozway 06.05.2022 10:00

возможно, я закрылся слишком быстро, я добавлю метод для сопоставления идентификаторов

mozway 06.05.2022 10:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Для преобразования вы можете использовать pandas.factorize:

Эта функция выводит оба фактора в виде пустого массива и уникальные идентификаторы в порядке факторов.

Вы можете сохранить оба и использовать этот уникальный список идентификаторов, чтобы map вернуть исходные идентификаторы позже:

factors, ids = pd.factorize(df['Original_Product_ID'])

df['New_Product_ID'] = factors

# map the original IDs
df['Original_ID_from_factor'] = df['New_Product_ID'].map(dict(enumerate(ids)))

выход:

  Original_Product_ID  New_Product_ID Original_ID_from_factor
0        Product1_ABC               0            Product1_ABC
1        Product4_ABC               1            Product4_ABC
2        Product1_ABC               0            Product1_ABC
3     Another_Product               2         Another_Product
4        Product4_ABC               1            Product4_ABC

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