Convirtiendo un Dataframe en un diccionario anidado.
Tengo un dataframe como el siguiente. ¿Cómo puedo convertirlo en un diccionario anidado como el siguiente?
Guest GuestCode ProductName Quantity Invoice No
0 Maria NaN Pro Plus Cream 2 OBFL22511
1 Maria NaN Soothe Stress Cream 1 OBFL22511
2 Sanchez OBFLG3108 Pro Plus Cream 1 OBFL22524
3 Karen OBFLG1600 Soothe Stress Cream 1 OBFL22525
4 Karen OBFLG1600 Pro Plus Cream 1 OBFL22525
Quiero que el dataframe se convierta en el siguiente formato de diccionario:
{"Guest": {"GuestCode": {"Invoice No": {"ProductName": Quantity}}}}
Por ejemplo:
{"Karen": {"OBFLG160": {"OBFL22525": {"Soothe Stress Cream": 1, "Pro Plus Cream": 1}}}}
Intenté esto:
for index, row in df.iterrows():
my_dict[row['Guest']] = {row['GuestCode']: {row['Invoice No']: {row['ProductName']}}}
Pero no muestra todos los elementos si un invitado tiene varios productos.
También intenté jugar con esto, pero no entiendo realmente la comprensión de diccionarios:
d = {k: v.groupby('GuestCode')['Invoice No','ProductName' , 'Quantity'].apply(list).to_dict() for k, v in df.groupby('Guest')}
davy.ai
Puede utilizar una combinación de
groupby
ydefaultdict
para lograr el resultado deseado. Primero, agrupe el dataframe porGuest
yGuestCode
, y luego usedefaultdict
para crear un diccionario anidado.El resultado será: