Pandas连接到多索引

时间:2018-05-02 18:21:36

标签: python-3.x pandas

我有五个具有相同索引和列名的DataFrame,我想在一个DataFrame中将它们连接起来,使用带有前一个索引和列名的多索引,新的列名将是[' A& #39;,' B' ,' C',' D',' E']即数据框架的名称。

(我想这样做是将它导出为带有5列和多行的np.array,我告诉你,因为也许有更好的方法。)

谢谢!

编辑: 我会尝试更清楚地解释一下: 说我们只有两个df:

df1 = AA
    X   Y   Z
0   x0  y0  z0
1   x1  y1  z1
2   x2  y2  z2

df2 = BB
    X   Y   Z
0   x00 y00 z00
1   x11 y11 z11
2   x22 y22 z22

我想要的是:

dfAll
        AA  BB
X   0   x0  x00
    1   x1  x11
    2   x2  x22
Y   0   y0  y00
    1   y1  y11
    2   y2  y22
Z   0   z0  z00
    1   z1  z11
    2   z2  z22

编辑2: 我设法用

做到了
df1 = df1.stack()
df2 = df2.stack()
dfALL = pd.concat([df1, df2], axis=1)

感谢您的提示,这有助于我思考。

1 个答案:

答案 0 :(得分:1)

keys使用concat参数Multiindex

np.random.seed(234)

df1 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df2 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df3 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df4 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df5 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))

df = pd.concat([df1, df2, df3, df4, df5], keys=['A', 'B' , 'C', 'D', 'E'])
print (df)
     A  B  C
A 0  8  4  9
  1  1  3  7
  2  6  3  0
B 0  3  3  2
  1  6  8  9
  2  3  7  5
C 0  7  4  0
  1  0  7  5
  2  7  3  9
D 0  3  9  3
  1  3  4  4
  2  8  5  7
E 0  2  7  4
  1  9  3  9
  2  8  9  7

如果希望输出2d array使用numpy.concatenate

arr = np.concatenate([df1.values, df2.values, df3.values, df4.values, df5.values])
print (arr)
[[8 4 9]
 [1 3 7]
 [6 3 0]
 [3 3 2]
 [6 8 9]
 [3 7 5]
 [7 4 0]
 [0 7 5]
 [7 3 9]
 [3 9 3]
 [3 4 4]
 [8 5 7]
 [2 7 4]
 [9 3 9]
 [8 9 7]]

编辑:使用参数keys

稍微改进了您的解决方案
dfALL = pd.concat([df1.stack(), df2.stack()], axis=1, keys=('AA', 'BB'))
print (dfALL)
     AA   BB
0 X  x0  x00
  Y  y0  y00
  Z  z0  z00
1 X  x1  x11
  Y  y1  y11
  Z  z1  z11
2 X  x2  x22
  Y  y2  y22
  Z  z2  z22