duplicated() отвечает не на тот вопрос
Вызов df.duplicated() ищет строки, совпадающие целиком, по всем столбцам сразу. Если два персонажа названы одинаково, но у них разная сила, — это разные строки, и такой повтор он не заметит.
А для работы важен как раз он. Стоит потом посчитать что-нибудь «по имени», и две разные записи тихо сольются в одну.
df.duplicated().sum() # повторы по ВСЕМ столбцам
df.duplicated(subset=["имя"]).sum() # повторы по одному столбцу
По каким столбцам считать повторы — решает задача, а не функция. Если ты собираешься группировать по имени, то и повторы надо искать по имени.