小智 12
使用三级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]}}}
Run Code Online (Sandbox Code Playgroud)
以下字典理解基于你所链接的问题之一
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()}
Run Code Online (Sandbox Code Playgroud)
这使
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]}
Run Code Online (Sandbox Code Playgroud)
对于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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您可以通过在理解中添加另一行以及向元组添加新键来轻松增加级别数.
额外奖励:为索引添加名称
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2378 次 |
| 最近记录: |