Pandas df для множественного вложенного словаря /json

#python #pandas

#python #pandas

Вопрос:

У меня возникли проблемы с преобразованием df в 3-уровневый вложенный словарь, есть ли какой-либо способ сделать это без уродливой функции, которая перебирает каждую строку? Что-то вроде .groupby .apply?

Ввод /DF:

 project,stage,error_code,count
Project_1,stage_1,0,8
Project_1,stage_1,1103,3
Project_1,stage_2,0,4
Project_1,stage_2,1103,2
Project_2,stage_1,0,14
Project_2,stage_1,1103,2
Project_2,stage_1,1105,1
Project_2,stage_2,0,5
  

Желаемый результат:

 [
    'Project_1': {
        'stage_1': {
            '0': 8,
            '1103': 3
        },
        'stage_2': {
            '0': 14,
            '1103': 2
        }
    },
    'Project_2': {
        'stage_1': {
            '0': 14,
            '1103': 2,
            '1105': 1
        },
        'stage_2': {
            '0': 5,
        }
    }
]
  

Ответ №1:

Вы можете сделать с groupby и unstack

 d=df.groupby(['project','stage']).
        apply(lambda x : dict(zip(x['error_code'],x['count']))).
           unstack(0).to_dict()
Out[12]: 
{'Project_1': {'stage_1': {0: 8, 1103: 3}, 'stage_2': {0: 4, 1103: 2}},
 'Project_2': {'stage_1': {0: 14, 1103: 2, 1105: 1}, 'stage_2': {0: 5}}}