Панды - группировать по всем столбцам и отмечать в исходном фрейме данных [дубликаты]

1

У меня есть DataFrame с DataFrame столбцами 'Id', а 'A', 'B', 'C' и т.д....

Существуют разные строки, где все значения 'A', 'B', 'C' одинаковы. Я хотел бы дать им имя группы (индекс работы от 1).

Например:

df = pd.DataFrame({"A": [1, 1, 1, 2], "B": [3, 4, 4, 4], "C": [5, 5, 5, 5]})
df
Out[127]: 
   A  B  C
0  1  3  5
1  1  4  5
2  1  4  5
3  2  4  5

Станет

   A  B  C  grp
0  1  3  5    1
1  1  4  5    2
2  1  4  5    2
3  2  4  5    3

Я знаю, что я могу группировать ['A', 'B', 'C'] и получать ключи, но вместо этого мне приходится перебирать ключи и Dataframe в не оптимизированном виде. Я не могу сделать это оптимизированным образом

Теги:
pandas

1 ответ

2
Лучший ответ

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

df['grp'] = df.groupby(['A', 'B', 'C']).ngroup() + 1
print (df)

   A  B  C  grp
0  1  3  5    1
1  1  4  5    2
2  1  4  5    2
3  2  4  5    3

Если столбцы отсортированы:

df['grp'] = pd.factorize([tuple(x) for x in df.values])[0] + 1
  • 1
    ngroup () ... черт, я использовал ngroup без скобок и застрял на этом. Спасибо, Израиль!
  • 0
    Можете ли вы быть более осторожным, прежде чем отвечать на дубликаты? Это второй раз, когда я поймал тебя сегодня вечером.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню