【发布时间】:2016-08-19 14:42:17
【问题描述】:
有一个 4-D numpy.ndarray,例如
myarr = np.random.rand(10,4,3,2)
dims={'time':1:10,'sub':1:4,'cond':['A','B','C'],'measure':['meas1','meas2']}
但可能有更高的维度。如何创建具有多索引的 pandas.dataframe,只需将维度作为索引传递,无需进一步手动调整(将 ndarray 重塑为 2D 形状)?
我无法完全理解重塑,甚至还没有真正在3 dimensions 中,所以如果可能的话,我正在寻找一种“自动”方法。
传递列/行索引并创建数据框的函数是什么?比如:
df=nd2df(myarr,dim2row=[0,1],dim2col=[2,3],rowlab=['time','sub'],collab=['cond','measure'])
还有类似的东西:
meas1 meas2
A B C A B C
sub time
1 1
2
3
.
.
2 1
2
...
如果不可能/不可行将其自动化,则表示赞赏比Multiindexing manual 更简洁的解释。
当我不关心维度的顺序时,我什至无法做到正确,例如我希望这会起作用:
a=np.arange(24).reshape((3,2,2,2))
iterables=[[1,2,3],[1,2],['m1','m2'],['A','B']]
pd.MultiIndex.from_product(iterables, names=['time','sub','meas','cond'])
pd.DataFrame(a.reshape(2*3*1,2*2),index)
给出:
ValueError: Shape of passed values is (4, 6), indices imply (4, 24)
【问题讨论】:
标签: numpy pandas multidimensional-array dataframe multi-index