Предполагая, что ваш источник DataFrame равен df , ваш словарь может быть сгенерирован с помощью инструкции single :
sales = { 'clients' : df.groupby(df.ID_client)\
.agg(list)\
.reset_index()\
.set_axis(['ID_client', 'purchases', 'payment'], axis=1, inplace=False)\
.to_dict('records')
}
Как выКак видите, создание массива - содержимое клиентов фактически состоит из следующей цепочки:
- groupby - группа df by ID_client ,
- agg - объединить все оставшиеся столбцы ( Покупка и Платеж ) в списки значений,на данный момент ID_client является индексом,
- reset_index , чтобы сделать ID_client обычным столбцом данных,
- set_axis - изменить имена столбцов (имена целевых компонентов немного отличаются от имен исходных столбцов),
- to_dict - создать словарь результатов.
Содержимое переменной sales :
{'clients': [{'ID_client': '241341',
'purchases': ['Item 101', 'Item 202', 'Item 324'],
'payment': ['visa', 'master', 'visa']},
{'ID_client': '24356',
'purchases': ['Item 2320', 'Item 2342', 'Item 5604'],
'payment': ['diners', 'cash', 'diners']},
{'ID_client': '5534',
'purchases': ['Item 50563', 'Item 52878', 'Item 54233'],
'payment': ['diners', 'master', 'visa']}]}
, как вы хотите.