создайте уникальный идентификатор, который соответствует двум столбцам

#python-3.x #pandas

#python-3.x #pandas

Вопрос:

Я хотел бы создать столбец, который генерирует уникальный идентификатор, соответствующий двум моим столбцам в моем фрейме данных.

Вот ниже приведен пример фрейма данных:

 df = pd.DataFrame({'month': [1, 2, 1, 3,4,5], 'brand': [76, 76, Arco, Shell, Arco, Cheveron],'address': [aa, aa, ab, bc, cd,de]})
  

Я хочу индекс, который соответствует как марке, так и адресу, но не месяцу

 df = pd.DataFrame({ 'id':[1,1,2,3,4,5] 'month': [1, 2, 1, 3,4,5], 'brand': [76, 76, Arco, Shell, Arco, Cheveron],'address': [aa, aa, ab, bc, cd,de]})
  

Ответ №1:

Используйте DataFrame.insert с GroupBy.ngroup :

 df.insert(0, 'id', df.groupby(['brand','address'], sort=False)['month'].ngroup()   1)
print (df)
   id  month     brand address
0   1      1        76      aa
1   1      2        76      aa
2   2      1      Arco      ab
3   3      3     Shell      bc
4   4      4      Arco      cd
5   5      5  Cheveron      de
  

Или объедините столбцы вместе и используйте factorize :

 s = df['brand'].astype(str)   '-'   df['address'].astype(str)
df.insert(0, 'id', pd.factorize(s)[0]   1)