如何从三层嵌套字典创建多索引
How to create a multi-index from a triple-nested dictionary
{
0 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} },
1 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} },
2 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} },
3 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} }
}
这是我的数据。
我想创建一个具有以下多索引的数据框:
indexML = pd.MultiIndex.from_arrays(arrays=[level1,level2],names=['K-Value','Model'])
MultiIndex([(0, 'acc507'),
(0, 'acc522'),
(0, 'acc551'),
(1, 'acc507'),
(1, 'acc522'),
(1, 'acc551'),
(2, 'acc507'),
(2, 'acc522'),
(2, 'acc551'),
(3, 'acc507'),
(3, 'acc522'),
(3, 'acc551')],
names=['K-Value', 'Model'])
我现在想添加 3 列,'max'、'mean'、'min'。我如何访问那些最后一级的值?我需要遍历每个字典还是有直接访问最后一个嵌套的方法?
这似乎是 messy/hard 使用数据结构。有没有更好的方法来存储此类信息?
尝试:
srs = pd.DataFrame(data).stack()
output = (pd.DataFrame(srs.tolist(), index=srs.index)
.swaplevel()
.rename_axis(['K-Value', 'Model']))
>>> output
max mean min
K-Value Model
0 acc507 1 2 3
1 acc507 1 2 3
2 acc507 1 2 3
3 acc507 1 2 3
0 acc522 1 2 3
1 acc522 1 2 3
2 acc522 1 2 3
3 acc522 1 2 3
0 acc551 1 2 3
1 acc551 1 2 3
2 acc551 1 2 3
3 acc551 1 2 3
{
0 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} },
1 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} },
2 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} },
3 : {'acc507' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc522' : {'max' : 1, 'mean' : 2, 'min': 3} ,
'acc551' : {'max' : 1, 'mean' : 2, 'min': 3} }
}
这是我的数据。 我想创建一个具有以下多索引的数据框:
indexML = pd.MultiIndex.from_arrays(arrays=[level1,level2],names=['K-Value','Model'])
MultiIndex([(0, 'acc507'),
(0, 'acc522'),
(0, 'acc551'),
(1, 'acc507'),
(1, 'acc522'),
(1, 'acc551'),
(2, 'acc507'),
(2, 'acc522'),
(2, 'acc551'),
(3, 'acc507'),
(3, 'acc522'),
(3, 'acc551')],
names=['K-Value', 'Model'])
我现在想添加 3 列,'max'、'mean'、'min'。我如何访问那些最后一级的值?我需要遍历每个字典还是有直接访问最后一个嵌套的方法?
这似乎是 messy/hard 使用数据结构。有没有更好的方法来存储此类信息?
尝试:
srs = pd.DataFrame(data).stack()
output = (pd.DataFrame(srs.tolist(), index=srs.index)
.swaplevel()
.rename_axis(['K-Value', 'Model']))
>>> output
max mean min
K-Value Model
0 acc507 1 2 3
1 acc507 1 2 3
2 acc507 1 2 3
3 acc507 1 2 3
0 acc522 1 2 3
1 acc522 1 2 3
2 acc522 1 2 3
3 acc522 1 2 3
0 acc551 1 2 3
1 acc551 1 2 3
2 acc551 1 2 3
3 acc551 1 2 3