[英]How to convert dictionary into multilevel dataframe?
Given: 鉴于:
A = pd.DataFrame([[1, 5, 2, 8, 2], [2, 4, 4, 20, 2], [3, 3, 1, 20, 2], [4, 2, 2, 1, 0],
[5, 1, 4, -5, -4], [1, 5, 2, 2, -20], [2, 4, 4, 3, 0], [3, 3, 1, -1, -1],
[4, 2, 2, 0, 0], [5, 1, 4, 20, -2]],
columns=['a', 'b', 'c', 'd', 'e'],
index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
B = pd.DataFrame([[0, 0, 0, 8, 2], [1, 1, 1, 1, 1], [0, 0, 0, 8, 2], [0, 0, 2, 1, 0],
[5, 1, 4, -5, -4], [0, 0, 0, 8, 2], [2, 4, 4, 3, 0], [1, 3, 1, -1, -1],
[1, 1, 2, 0, 0], [2, 2, 2, 20, -2]],
columns=['a', 'b', 'c', 'd', 'e'],
index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
test_list = [('test1', A), ('test2', B)]
d_test = dict(test_list)
Then I run into trouble when I try to convert this dictionary into a multi level dataframe. 然后,当我尝试将此字典转换为多级数据帧时,我遇到了麻烦。 But I don't know how to specify the multilevel, I want the 'key' to be the name of the dataframe in the second level. 但我不知道如何指定多级,我希望'key'成为第二级数据帧的名称。 This is the desired output 这是所需的输出
df
test_1 test_2
a b c d e a b c d e
1 1 5 2 8 2 0 0 0 8 2
2 2 4 4 20 2 1 1 1 1 1
3 3 3 1 20 2 0 0 0 8 2
4 4 2 2 1 0 0 0 2 1 0
5 5 1 4 -5 -4 5 1 4 -5 -4
6 1 5 2 2 -20 0 0 0 8 2
7 2 4 4 3 0 2 4 4 3 0
8 3 3 1 -1 -1 1 3 1 -1 -1
9 4 2 2 0 0 1 1 2 0 0
10 5 1 4 20 -2 2 2 2 20 -2
Just for the purpose of having here an answer (which was already given in the comments) here it goes (again): 只是为了在这里有一个答案(已经在评论中给出)这里(再次):
import pandas as pd
A = pd.DataFrame([[1, 5, 2, 8, 2], [2, 4, 4, 20, 2], [3, 3, 1, 20, 2], [4, 2, 2, 1, 0],
[5, 1, 4, -5, -4], [1, 5, 2, 2, -20], [2, 4, 4, 3, 0], [3, 3, 1, -1, -1],
[4, 2, 2, 0, 0], [5, 1, 4, 20, -2]],
columns=['a', 'b', 'c', 'd', 'e'],
index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
B = pd.DataFrame([[0, 0, 0, 8, 2], [1, 1, 1, 1, 1], [0, 0, 0, 8, 2], [0, 0, 2, 1, 0],
[5, 1, 4, -5, -4], [0, 0, 0, 8, 2], [2, 4, 4, 3, 0], [1, 3, 1, -1, -1],
[1, 1, 2, 0, 0], [2, 2, 2, 20, -2]],
columns=['a', 'b', 'c', 'd', 'e'],
index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
AB=pd.concat([A,B], axis=1)
header = ['test1','test1','test1','test1','test1','test2','test2','test2','test2','test2']
AB.columns = pd.MultiIndex.from_tuples(list(zip(header, AB.columns)))
print(AB) # gives what was asked for
print("test1: \n", AB.test1) # gives A
print("test2: \n", AB.test2) # gives B
Another (down to real life situation) way of achieving the same (answer given in the above comments): 另一种(直到现实生活中的情况)实现相同的方式(上述评论中给出的答案):
test_list = [('test1', A), ('test2', B)]
d_test = dict(test_list)
AB = pd.concat(d_test.values(), keys=d_test.keys(), axis=1)
# what means: AB = pd.concat([A,B], keys=['test1', 'test2'], axis=1)
The code above outputs: 上面的代码输出:
test1 test2
a b c d e a b c d e
1 1 5 2 8 2 0 0 0 8 2
2 2 4 4 20 2 1 1 1 1 1
3 3 3 1 20 2 0 0 0 8 2
4 4 2 2 1 0 0 0 2 1 0
5 5 1 4 -5 -4 5 1 4 -5 -4
6 1 5 2 2 -20 0 0 0 8 2
7 2 4 4 3 0 2 4 4 3 0
8 3 3 1 -1 -1 1 3 1 -1 -1
9 4 2 2 0 0 1 1 2 0 0
10 5 1 4 20 -2 2 2 2 20 -2
test1:
a b c d e
1 1 5 2 8 2
2 2 4 4 20 2
3 3 3 1 20 2
4 4 2 2 1 0
5 5 1 4 -5 -4
6 1 5 2 2 -20
7 2 4 4 3 0
8 3 3 1 -1 -1
9 4 2 2 0 0
10 5 1 4 20 -2
test2:
a b c d e
1 0 0 0 8 2
2 1 1 1 1 1
3 0 0 0 8 2
4 0 0 2 1 0
5 5 1 4 -5 -4
6 0 0 0 8 2
7 2 4 4 3 0
8 1 3 1 -1 -1
9 1 1 2 0 0
10 2 2 2 20 -2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.