Я только начал работать с Pandas, и я изо всех сил пытаюсь добавить простой столбец, который добавляет группу строк + число вхождений уникальных значений в столбце.

Я пытался использовать groupby, но я не знаю, как добавить число на основе имени столбца

import pandas as pd

data = pd.read_csv('./data.csv')
data['group'] = data.groupby('name') # ??? 
   name  color
0  car   white
1  car   black
2  car   red
3  bus   white
4  bus   black
5  bus   red

Это должно выглядеть так

   name  color  group
0  car   white  group1
1  car   black  group1
2  car   red    group1
3  bus   white  group2
4  bus   black  group2
5  bus   red    group2
3
Álvaro 5 Июл 2019 в 19:54

3 ответа

Лучший ответ

Используйте factorize() здесь:

df=df.assign(group=(pd.factorize(df.name)[0]+1))

  name  color  group
0  car  white      1
1  car  black      1
2  car    red      1
3  bus  white      2
4  bus  black      2
5  bus    red      2
4
anky_91 5 Июл 2019 в 17:02

С pandas.core.groupby.GroupBy.ngroup особенность:

In [162]: df['group'] = 'group' + (df.groupby('name', sort=False).ngroup()+1).astype(str)

In [163]: df
Out[163]: 
  name  color   group
0  car  white  group1
1  car  black  group1
2  car    red  group1
3  bus  white  group2
4  bus  black  group2
5  bus    red  group2
2
RomanPerekhrest 5 Июл 2019 в 17:12

Я чувствую, что существующий ответ слишком усложняет ситуацию. В конце концов, все, что вам нужно, это создать соответствие между именем и именем группы.

group_map = {name: f'group{idx+1}' for idx,name in enumerate(set(data['name']))}

group_map
{'bus': 'group1', 'car': 'group2'}

data['group']=data['name'].map(group_map)
0
Mark Wang 6 Июл 2019 в 20:38