Это должно быть возможно, если вы группируете индекс.
groupby
Понимание
{k: g.to_dict(orient='records') for k, g in df.groupby(level=0)}
# {'bob': [{'age': 20, 'name': 'bob'}, {'age': 30, 'name': 'bob'}],
# 'jim': [{'age': 25, 'name': 'jim'}]}
Детали
groupby
позволяет разделить данные на основе уникальных ключей:
for k, g in df.groupby(level=0):
print(g, end='\n\n')
age name
name
bob 20 bob
bob 30 bob
age name
name
jim 25 jim
Для каждой группы преобразовать это в словарь, используя «записи» orient:
for k, g in df.groupby(level=0):
print(g.to_dict('r'))
[{'age': 20, 'name': 'bob'}, {'age': 30, 'name': 'bob'}]
[{'age': 25, 'name': 'jim'}]
И пусть он доступен по ключу окуня.
GroupBy.apply
+ to_dict
df.groupby(level=0).apply(lambda x: x.to_dict('r')).to_dict()
# {'bob': [{'age': 20, 'name': 'bob'}, {'age': 30, 'name': 'bob'}],
# 'jim': [{'age': 25, 'name': 'jim'}]}
apply
делает то же самое, что и словарное понимание - оно перебирает каждую группу. Единственная разница в том, что apply
потребует один последний to_dict
звонок в конце, чтобы продиктовать данные.