根据其他列将数据框的一列转换为numpy数组或张量

Posted

技术标签:

【中文标题】根据其他列将数据框的一列转换为numpy数组或张量【英文标题】:Convert a column of dataframe to numpy array or tensor based on other columns 【发布时间】:2021-06-05 10:13:46 【问题描述】:

考虑如下数据框:

df = pd.DataFrame('r': [1, 1, 2, 2], 'c': [0, 2, 1, 2], 'v': [2, 4, 3, 5],)

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

arr = array([[0, 0, 0],
   [2, 0, 4],
   [0, 3, 5]])

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

【问题讨论】:

【参考方案1】:

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

r, c, v = df.T.values
arr = np.zeros((r.max() + 1, c.max() + 1))
arr[r, c] = v

>>> arr

array([[0., 0., 0.],
       [2., 0., 4.],
       [0., 3., 5.]])

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

r, c = np.nonzero(arr)
df = pd.DataFrame('r': r, 'c': c, 'v': arr[r, c])

>>> df

   r  c    v
0  1  0  2.0
1  1  2  4.0
2  2  1  3.0
3  2  2  5.0

【讨论】:

以上是关于根据其他列将数据框的一列转换为numpy数组或张量的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Row_id 列将值写入数据框的另一列并且匹配列中存在值?

TypeError:获取参数数组的类型无效 numpy.ndarray,必须是字符串或张量。 (不能将 ndarray 转换为张量或操作。)

NotImplementedError:无法将符号张量 (2nd_target:0) 转换为 numpy 数组

将 Numpy 数组转换为张量

自己的数据集:ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型 int)

将张量变量(非常数)转换为 numpy 数组? [复制]