#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}}}