鉴于:

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)

当我试图把这本字典转换成一个多级数据帧时,我遇到了麻烦。但我不知道如何指定多级,我希望“key”是第二级数据帧的名称。这是所需的输出
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

最佳答案

只是为了这里有个答案
(这已经在评论中给出)这里(再次):

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

实现同样目标的另一种方法(具体到现实生活中的情况)(上述评论中给出的答案):
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)

上述代码输出:
   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

09-07 19:03