У меня есть 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 в не оптимизированном виде. Я не могу сделать это оптимизированным образом
Используйте 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