Convertir un marco de datos a diccionario con múltiples valores

Tengo un marco de datos como

Sr.No   ID       A         B          C         D
 1     Tom     Earth    English      BMW
 2     Tom     Mars     Spanish      BMW       Green          
 3     Michael Mercury  Hindi        Audi      Yellow
 4     John    Venus    Portugese    Mercedes  Blue
 5     John             German       Audi      Red

Estoy tratando de convertir esto a un diccionario por ID como:

{'ID' : 'Tom', 'A' : ['Earth', 'Mars'], 'B' : ['English', 'Spanish'], 'C' : 
                                                ['BMW', 'BMW'], 'D':['Green'] }, 

{'ID' : 'Michael', 'A' : ['Mercury'], 'B' : ['Hindi'], 'C' : ['Audi'],
                                                               'D':['Yellow']},

{'ID' : 'John', 'A' : ['Venus'], 'B' : ['Portugese', 'German'], 'C' : 
                                     ['Mercedes', 'Audi'], 'D':['Blue', 'Red'] }

Esta es algo similar a lo que quiero

También lo intenté

df.set_index('ID').to_dict()

pero esto me da un diccionario de longitud 5 en lugar de 3. Cualquier ayuda sería apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta