答案 0 :(得分:9)
使用三级dict的例子
In [1]: import pandas as pd
In [2]: dictionary = {'A': {'a': {1: [2,3,4,5,6],
...: 2: [2,3,4,5,6]},
...: 'b': {1: [2,3,4,5,6],
...: 2: [2,3,4,5,6]}},
...: 'B': {'a': {1: [2,3,4,5,6],
...: 2: [2,3,4,5,6]},
...: 'b': {1: [2,3,4,5,6],
...: 2: [2,3,4,5,6]}}}
以下词典理解基于您链接的问题
In [3]: reform = {(level1_key, level2_key, level3_key): values
...: for level1_key, level2_dict in dictionary.items()
...: for level2_key, level3_dict in level2_dict.items()
...: for level3_key, values in level3_dict.items()}
哪个给出了
In [4]: reform
Out[4]:
{('A', 'a', 1): [2, 3, 4, 5, 6],
('A', 'a', 2): [2, 3, 4, 5, 6],
('A', 'b', 1): [2, 3, 4, 5, 6],
('A', 'b', 2): [2, 3, 4, 5, 6],
('B', 'a', 1): [2, 3, 4, 5, 6],
('B', 'a', 2): [2, 3, 4, 5, 6],
('B', 'b', 1): [2, 3, 4, 5, 6],
('B', 'b', 2): [2, 3, 4, 5, 6]}
对于pandas DataFrame
In [5]: pd.DataFrame(reform)
Out[5]:
A B
a b a b
1 2 1 2 1 2 1 2
0 2 2 2 2 2 2 2 2
1 3 3 3 3 3 3 3 3
2 4 4 4 4 4 4 4 4
3 5 5 5 5 5 5 5 5
4 6 6 6 6 6 6 6 6
In [6]: df = pd.DataFrame(reform).T
Out[6]:
0 1 2 3 4
A a 1 2 3 4 5 6
2 2 3 4 5 6
b 1 2 3 4 5 6
2 2 3 4 5 6
B a 1 2 3 4 5 6
2 2 3 4 5 6
b 1 2 3 4 5 6
2 2 3 4 5 6
如您所见,您可以通过添加轻松增加关卡数量 理解的另一条线和元组的新关键。
奖励:为索引添加名称
In [7]: names=['level1', 'level2', 'level3']
In [8]: df.index.set_names(names, inplace=True)
In [9]: df
Out[9]:
0 1 2 3 4
level1 level2 level3
A a 1 2 3 4 5 6
2 2 3 4 5 6
b 1 2 3 4 5 6
2 2 3 4 5 6
B a 1 2 3 4 5 6
2 2 3 4 5 6
b 1 2 3 4 5 6
2 2 3 4 5 6