Прошу помочь сгруппировать одинаковые значение в строке pandas
Есть следующий dataframe состоящий из одинаковых строк.
| id | name |
|---|---|
| 1 | Оператор фронтального погрузчика |
| 2 | Оператор фронтального погрузчика |
| 3 | Продавец продовольственных товаров |
| 4 | Продавец продовольственных товаров |
| 5 | Оператор фронтального погрузчика |
Необходимо добавить столбец 'group' следующего вида
| id | name | group |
|---|---|---|
| 1 | Оператор фронтального погрузчика | 1 |
| 2 | Оператор фронтального погрузчика | 1 |
| 3 | Продавец продовольственных товаров | 2 |
| 4 | Продавец продовольственных товаров | 2 |
| 5 | Оператор фронтального погрузчика | 1 |
Ответы (2 шт):
Автор решения: Step1709
→ Ссылка
Наверняка есть более элегантные способы, но я смог так:
l_help = [] #список с номерами для каждой уникальной профессии
for i in range(1, len(df['name'].unique())+1):
l_help.append(i) # заполнение списка номерами
df_help = pd.DataFrame({'name': df['name'].unique(), 'group': l_help}) # датафрейм в котором хранятся уникальные пары профессия-номер
df = pd.merge(left=df, right=df_help, on='name') # объединение в 1 датафрейм
Автор решения: passant
→ Ссылка
Вообще-то, если данные уже представлены в Pandas, значит скорее всего - это DataFrame. Как вам уже писали, на этом сайте принято данные представлять так, что-бы другие могди легко промоделировать ваш скрипт. Странно, что вы этого не сделали, ну да ладно, наверное вы очень заняты:
df1=pd.DataFrame({'id':[1,2,3,4,5],
'name':['Оператор фронтального погрузчика',
'Оператор фронтального погрузчика',
'Продавец продовольственных товаров',
'Продавец продовольственных товаров',
'Оператор фронтального погрузчика']})
После этого задача решается в одну строчку:
from sklearn import preprocessing
df1['group']= preprocessing.LabelEncoder().fit_transform(df1['name'])
Результат:
id name group
0 1 Оператор фронтального погрузчика 0
1 2 Оператор фронтального погрузчика 0
2 3 Продавец продовольственных товаров 1
3 4 Продавец продовольственных товаров 1
4 5 Оператор фронтального погрузчика 0
Или, если группы вам надо именно 1,2,3.... то вот так:
df1['group']= preprocessing.LabelEncoder().fit_transform(df1['name'])+1
id name group
0 1 Оператор фронтального погрузчика 1
1 2 Оператор фронтального погрузчика 1
2 3 Продавец продовольственных товаров 2
3 4 Продавец продовольственных товаров 2
4 5 Оператор фронтального погрузчика 1
И никаких дополнительных DataFrame и извращений с циклами.