Как сгруппировать по нескольким столбцам и создать новый столбец на основе условий в Python? - PullRequest
3 голосов
/ 11 марта 2020

У меня есть фрейм данных, как показано ниже, и я хочу создать новый столбец на основе столбца

Условие

Если две или несколько строк содержат одно и то же значение для столбца A и столбца B и столбца C уникально, тогда строке должно быть присвоено уникальное имя группы

Вход

A           B        C   
Payment    Mark      2  
Payment    Mark      3   
Delayed    Charles   2  
Delayed    Charles   4   
Held       Mark      3   
Held       Charles   4   
Payment    Mark      2   
Payment    Mark      3   
Delayed    Charles   4   
Held       Charles   4  

Ожидаемый результат

  A        B         C   Cluster
Payment    Mark      2   C1
Payment    Mark      3   C2
Delayed    Charles   2   C3
Delayed    Charles   4   C4
Held       Mark      3   C5
Held       Charles   4   C6
Payment    Mark      2   C1
Payment    Mark      3   C2
Delayed    Charles   4   C4
Held       Charles   4   C6

Как это можно сделать в python

1 Ответ

4 голосов
/ 11 марта 2020

Это проблема 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
...