【问题标题】:Convert a column of dataframe to numpy array or tensor based on other columns根据其他列将数据框的一列转换为numpy数组或张量
【发布时间】: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 怎么样?

【问题讨论】:

    标签: python pandas numpy tensorflow


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 2017-11-09
      • 2019-12-27
      • 1970-01-01
      • 2021-02-02
      • 2019-01-24
      • 2017-08-11
      • 1970-01-01
      • 2018-12-15
      相关资源
      最近更新 更多