将一列数据帧转换为基于其他列的 numpy 数组或张量

Tah*_*her 4 python numpy pandas tensorflow

考虑一个像这样的数据框:

df = pd.DataFrame({'r': [1, 1, 2, 2], 'c': [0, 2, 1, 2], 'v': [2, 4, 3, 5],})
Run Code Online (Sandbox Code Playgroud)

我想提取一个 numpy 数组或张量,将 'r' 和 'c' 作为矩阵的行和列索引。所以相应的矩阵将是这样的:

arr = array([[0, 0, 0],
   [2, 0, 4],
   [0, 3, 5]])
Run Code Online (Sandbox Code Playgroud)

那么有没有一种体面的方法来做到这一点,或者我必须遍历每个 df 行?从像 arr 这样的矩阵中提取数据帧 df 怎么样?

Shu*_*rma 6

要创建一个numpy从数据帧阵列考虑rc作为rowcolumn索引:

r, c, v = df.T.values
arr = np.zeros((r.max() + 1, c.max() + 1))
arr[r, c] = v
Run Code Online (Sandbox Code Playgroud)
>>> arr

array([[0., 0., 0.],
       [2., 0., 4.],
       [0., 3., 5.]])
Run Code Online (Sandbox Code Playgroud)

要从numpy上面的数组重新创建数据帧,您可以使用np.nonzero获取非零元素的索引:

r, c = np.nonzero(arr)
df = pd.DataFrame({'r': r, 'c': c, 'v': arr[r, c]})
Run Code Online (Sandbox Code Playgroud)
>>> df

   r  c    v
0  1  0  2.0
1  1  2  4.0
2  2  1  3.0
3  2  2  5.0
Run Code Online (Sandbox Code Playgroud)