Мы можем использовать duplicated
с np.where
, чтобы установить значения в соответствии с результатом:
df['type'] = np.where(df.duplicated('ID', False), 'Duplicate', 'Single')
print(df)
Obs. ID Name type
0 1) 123 abc Duplicate
1 2) 123 abc Duplicate
2 3) 145 abc Single
3 4) 156 abc Duplicate
4 5) 156 abc Duplicate
Для обновления вам просто необходим простой твик:
df['type'] = np.where(~df.duplicated('ID', False), df.Name, 'Duplicate')
print(df)
Obs. ID Name type
0 1) 123 abc Duplicate
1 2) 123 abc Duplicate
2 3) 145 abc abc
3 4) 156 abc Duplicate
4 5) 156 abc Duplicate