Pandas 多索引数据帧到 Numpy Ndarray

Sco*_*ott 4 python numpy multi-index pandas

我正在尝试将多索引熊猫DataFrame转换为numpy.ndarray. 数据框如下:

               s1  s2   s3   s4
Action State                   
1      s1     0.0   0  0.8  0.2
       s2     0.1   0  0.9  0.0
2      s1     0.0   0  0.9  0.1
       s2     0.0   0  1.0  0.0
Run Code Online (Sandbox Code Playgroud)

我希望结果numpy.ndarray如下np.shape() = (2,2,4)

[[[ 0.0  0.0  0.8  0.2 ]
  [ 0.1  0.0  0.9  0.0 ]]

 [[ 0.0  0.0  0.9  0.1 ]
  [ 0.0  0.0  1.0  0.0]]]
Run Code Online (Sandbox Code Playgroud)

我试过了,df.as_matrix()但这会返回:

 [[ 0.   0.   0.8  0.2]
  [ 0.1  0.   0.9  0. ]
  [ 0.   0.   0.9  0.1]
  [ 0.   0.   1.   0. ]]
Run Code Online (Sandbox Code Playgroud)

如何返回第一级的列表列表,每个列表代表一个Action记录。

Bra*_*mon 5

您可以使用以下内容:

dim = len(df.index.get_level_values(0).unique())
result = df.values.reshape((dim1, dim1, df.shape[1]))
print(result)
[[[ 0.   0.   0.8  0.2]
  [ 0.1  0.   0.9  0. ]]

 [[ 0.   0.   0.9  0.1]
  [ 0.   0.   1.   0. ]]]
Run Code Online (Sandbox Code Playgroud)

第一行只是找到您想要分组的组数。

为什么需要这个(或 groupby):一旦你使用.values,你就会失去来自熊猫的 MultiIndex 的维度。所以你需要以某种方式将该维度重新传递给 NumPy。

  • 请注意,您现在需要使用“.to_numpy”而不是“.values”,并且此方法假设您的数据框中存在 Action * State * State 的所有组合。 (2认同)