根据其他列将数据框的一列转换为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
数组,考虑r
和c
作为row
和column
索引:
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 数组