Как сгруппировать два столбца и назначить категорию (номер) в новом столбце? - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу сгруппировать по возрасту и имени и назначить разных людей в одной и той же категории.

Исходные данные:

name age salary 
abc   24  1000    
def   27  2000    
ghi   25  3000    
jkl   24  1000    
mno   25  3000 

Окончательные данные:

name age salary group
abc   24  1000    1
def   27  2000    2
ghi   25  3000    3
jkl   24  1000    1
mno   25  3000    3

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Используйте factorize со списком кортежей, созданных в обоих столбцах:

df['group'] = pd.factorize(list(zip(df['age'],df['salary'])))[0] + 1
print (df)
  name  age  salary  group
0  abc   24    1000      1
1  def   27    2000      2
2  ghi   25    3000      3
3  jkl   24    1000      1
4  mno   25    3000      3

Или:

df['group'] = pd.factorize(list(map(tuple, df[['age','salary']].values.tolist())))[0] + 1
print (df)
  name  age  salary  group
0  abc   24    1000      1
1  def   27    2000      2
2  ghi   25    3000      3
3  jkl   24    1000      1
4  mno   25    3000      3
0 голосов
/ 28 сентября 2018

вы можете использовать factorize для преобразования ваших категорий в целочисленные идентификаторы.

Назначьте данные для df, а затем используйте следующий код.

# concat age and salary
fact = df.age.astype(str).str.cat(df.salary.astype(str))
# then use factorize
df['group'] = pd.factorize(fact)[0] + 1

Вывод:

  name age  salary  group
0  abc  24    1000      1
1  def  27    2000      2
2  ghi  25    3000      3
3  jkl  24    1000      1
4  mno  25    3000      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...