Это проблема factorize
.
Одним из способов будет объединение столбцов в одну серию и factorize
, add
1 и add
C
в начале:
df['Cluster'] = (pd.Series(df[['A','B','C']].astype(str).agg(''.join,1)
.factorize()[0]).add(1).astype(str).radd('C'))
print(df)
Другой способ будет аналогичным, но с groupby.ngroup
df['Cluster'] = (df.groupby(['A','B','C'],sort=False).ngroup()
.add(1).astype(str).radd('C'))
A B C Cluster
0 Payment Mark 2 C1
1 Payment Mark 3 C2
2 Delayed Charles 2 C3
3 Delayed Charles 4 C4
4 Held Mark 3 C5
5 Held Charles 4 C6
6 Payment Mark 2 C1
7 Payment Mark 3 C2
8 Delayed Charles 4 C4
9 Held Charles 4 C6