我有五个具有相同索引和列名的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)
感谢您的提示,这有助于我思考。
答案 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