![](/img/trans.png)
[英]Python & Pandas: Create a 3d histogram from 2 columns of a dataframe
[英]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.