簡體   English   中英

從 Dataframe 的 4 列創建一個 3D 矩陣

[英]create a 3D matrix from 4 columns of a Dataframe

我想從我的數據框的 4 列創建一個 3D 矩陣

輸入:

df = pd.DataFrame({
  "u_id": [55218,55218,55218,55222],
  "i_id": [0,0,1,1],
  "Num": [0,2,1,2]
  "rating":[-1,2,0,2]})

x 軸:'u_id'; y 軸:'i_id' z 軸:'Num'

矩陣中的值應該是“評級”

結果應該是

[[[NaN,NaN],
  [-1 ,NaN]],
 [[NaN,NaN],
  [  0,NaN]],
 [[  2,NaN],
  [NaN,2]]]

到目前為止我嘗試過的:

x = df['u_id']
y = df['i_id']
z = df['Num']
value = df['rating']
Matrix = [[0 for m in len(z)] for m in len(z)] for c in len(x):

Matrix[c][r][m]= value

但這不起作用。

我認為您的預期輸出不代表您的數據框中的信息。 但是,如果您希望將rating值與其他列一起放置作為具有形狀(3,2,2)的 3D 數組中的索引

設置輸入數據

import numpy as np
import pandas as pd

df = pd.DataFrame({
  "u_id": [55218,55218,55218,55222],
  "i_id": [0,0,1,1],
  "Num": [0,2,1,2],      # <-- here was a small typo in your code
  "rating":[-1,2,0,2]})
df

出去:

    u_id  i_id  Num  rating
0  55218     0    0      -1
1  55218     0    2       2
2  55218     1    1       0
3  55222     1    2       2

首先將u_id轉換為合適的索引

df['u_id'] = df['u_id'].astype('category').cat.codes
df[['Num','u_id','i_id','rating']] # order columns to correspond to coordinates

出去:

   Num  u_id  i_id  rating
0    0     0     0      -1
1    2     0     0       2
2    1     0     1       0
3    2     1     1       2

然后創建輸出數組並填寫rating

x = np.full(df[['Num','u_id','i_id']].nunique(), np.nan)
x[df['Num'], df['u_id'], df['i_id']] = df['rating']
x

出去:

array([[[-1., nan],
        [nan, nan]],

       [[nan,  0.],
        [nan, nan]],

       [[ 2., nan],
        [nan,  2.]]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM