Python 如何使用具有相同名称/标识符的多个列创建数据框架

Python 如何使用具有相同名称/标识符的多个列创建数据框架,python,pandas,Python,Pandas,有可能创建一个带有多维列的熊猫数据帧(或类似的东西)吗(如果有意义的话)?我想做的是: a = rand(10,1) b = rand(10,1) c = rand(10,1) z = rand(10,3) X = hstack((a,b,c,z)) dfX = DataFrame(X, columns=['a','b','c','z']) 由于z的尺寸,上述方法显然不起作用。我的代码需要将X(或dfX.values)格式化为矩阵,但我希望能够通过dfX['a']而不是X[:,0]处理数据。前

有可能创建一个带有多维列的熊猫数据帧(或类似的东西)吗(如果有意义的话)?我想做的是:

a = rand(10,1)
b = rand(10,1)
c = rand(10,1)
z = rand(10,3)
X = hstack((a,b,c,z))
dfX = DataFrame(X, columns=['a','b','c','z'])
由于z的尺寸,上述方法显然不起作用。我的代码需要将X(或dfX.values)格式化为矩阵,但我希望能够通过
dfX['a']
而不是
X[:,0]
处理数据。前者读起来更好。我要找的是能产生dfX['z']的东西。形状是
(10,3)


这可能吗?有比熊猫数据帧更好的解决方案吗

如果我理解正确-您询问的是多级列:

In [116]: cols = pd.MultiIndex.from_tuples([('a',''),('b',''),('c',''),('z','1'),('z','2'),('z','3')])

In [117]: df = pd.DataFrame(X, columns=cols)

In [118]: df
Out[118]:
          a         b         c         z
                                        1         2         3
0  0.537156  0.660093  0.327486  0.669400  0.677605  0.174052
1  0.787965  0.983033  0.615065  0.720758  0.853734  0.724249
2  0.587206  0.841086  0.781004  0.676756  0.177496  0.845777
3  0.174780  0.620644  0.338403  0.336302  0.508739  0.210462
4  0.132288  0.765768  0.009254  0.155105  0.548964  0.618722
5  0.980484  0.844023  0.779290  0.462613  0.562098  0.571654
6  0.082263  0.511944  0.003198  0.359354  0.531740  0.870077
7  0.805626  0.745733  0.251047  0.737418  0.532125  0.208116
8  0.906066  0.827050  0.434911  0.869463  0.089989  0.074839
9  0.146566  0.960262  0.957117  0.269052  0.086013  0.558531
结果:

In [119]: df.loc[:, 'a']
Out[119]:
0    0.537156
1    0.787965
2    0.587206
3    0.174780
4    0.132288
5    0.980484
6    0.082263
7    0.805626
8    0.906066
9    0.146566
Name: a, dtype: float64

In [120]: df.loc[:, 'z']
Out[120]:
          1         2         3
0  0.669400  0.677605  0.174052
1  0.720758  0.853734  0.724249
2  0.676756  0.177496  0.845777
3  0.336302  0.508739  0.210462
4  0.155105  0.548964  0.618722
5  0.462613  0.562098  0.571654
6  0.359354  0.531740  0.870077
7  0.737418  0.532125  0.208116
8  0.869463  0.089989  0.074839
9  0.269052  0.086013  0.558531

In [121]: df.loc[:, ('z','2')]
Out[121]:
0    0.677605
1    0.853734
2    0.177496
3    0.508739
4    0.548964
5    0.562098
6    0.531740
7    0.532125
8    0.089989
9    0.086013
Name: (z, 2), dtype: float64

不,我明白,你需要多个索引?这个问题与keras没有任何关系-请不要垃圾邮件标签(删除)。是的,我认为这是解决类似问题的唯一可能的方法,很好的一个+1@MaxU-这很有效,似乎是解决我问题的好办法。非常感谢!我从来没有使用过多级列,所以我对它们不熟悉。