Хотя я не могу уяснить вопрос о том, что является целью группировки, если вы хотите увидеть уникальные вхождения вместе с их (дублированными) индексами, вы всегда можете прибегнуть к группировке.
df.groupby(('name', 'job', 'id_number'),as_index=True).apply(lambda x: x.index.tolist())
Вывод:
name job id_number
alex dancer 456985 [3]
daisy engg 256498 [2, 9, 10]
krul painter 125796 [0, 5]
mandy arch 456258 [4]
tim lawyer 789632 [1, 6, 7, 8]
dtype: object
К которым вы можете затем применять все виды запросов, чтобы получить длину и первый из списков.
В зависимости от того, что вам нужно для этого, возможно, есть лучшие способы сделать это, см., например, ответ @Quang Hoang