2darray数据集的多个数据框的Numpy或Pandas

时间:2019-07-12 07:01:45

标签: pandas numpy dataset

希望我在标题中使用正确的同义词,以描述我的问题。

我的数据具有以下结构

D = {E_1, E_2...,E_n} with E_i = {M_{i,1}, M_{i,2},...M_{i,m}} and each M_{i,j} is a 6x2 Matrix.

我使用尺寸为n x m x 6 x 2的numpy数组保存数据。如果每个数据集E_i具有相同数量的矩阵,就可以了。

但是此解决方案不再起作用,因为我现在使用的是矩阵数量不同的数据集E_i,即E_i具有m_i个矩阵。

Pandas中也许可以解决我的问题吗?最后,我需要输入每个矩阵以作为一个numpy数组进行操作,即乘,逆,行列式……。

1 个答案:

答案 0 :(得分:0)

您可以尝试在熊猫中使用多重索引来执行此操作。这使您可以按级别选择数据框。一个简单的示例说明如何实现这样的目标:

D = np.repeat([0, 1], 12)
E = np.repeat([0, 1, 0, 1], 6)
print(D, E)
index_cols = pd.MultiIndex.from_arrays(
        [D, E],
        names=["D_idx", "E_idx"])
M = np.ones([24,2])
df = pd.DataFrame(M,
       index=index_cols,
       columns=["left", "right"])
print(df)

这为您提供了数据框:

             left  right
D_idx E_idx             
0     0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
1     0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      0       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0
      1       1.0    1.0

然后您可以根据级别对数据帧进行切片,即,如果您要检索集合D_1中的所有元素,则可以选择:df.loc[[(0, 0), (0, 1)], :] 您可以使用list(zip(d_idx, e_idx))生成这样的选择器,以便选择特定的行。

您可以在此处找到有关切片和选择数据框的更多信息:

https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html