我有一本字典,看起来像这样:
dic = {'a': {'b': [1,2], 'c': [3,4]}, 'A': {'B': [10,20], 'C': [30, 40]}}
我想得到一个有3列的2维数据帧,看起来像这样:
'a' 'b' 1
'a' 'b' 2
'a' 'c' 3
'a' 'c' 4
'A' 'B' 10
'A' 'B' 20
'A' 'C' 30
'A' 'C' 40
你可以试试这个:
s=pd.DataFrame(d).stack().explode().reset_index()
level_0 level_1 0
0 b a 1
1 b a 2
2 c a 3
3 c a 4
4 B A 10
5 B A 20
6 C A 30
7 C A 40
使用列表理解:
import pandas as pd
dic = {'a': {'b': [1,2], 'c': [3,4]}, 'A': {'B': [10,20], 'C': [30, 40]}}
data = [
(val_1, val_2, val_3)
for val_1, nest_dic in dic.items()
for val_2, nest_list in nest_dic.items()
for val_3 in nest_list
]
df = pd.DataFrame(data)
print(df)
# Output:
# 0 1 2
# 0 a b 1
# 1 a b 2
# 2 a c 3
# 3 a c 4
# 4 A B 10
# 5 A B 20
# 6 A C 30
# 7 A C 40
可能是这样的:
In [1845]: pd.concat({k: pd.DataFrame(v).T for k, v in dic.items()},axis=0).reset_index()
Out[1845]:
level_0 level_1 0 1
0 a b 1 2
1 a c 3 4
2 A B 10 20
3 A C 30 40