2017-03-03 45 views
0

我有电影分级的数据集,看起来如下:地图三行数据到矩阵

enter image description here

我想这个映射到一个矩阵,其中在用户ID索引,列filmsids和values是评级。

我迄今所做的是:

movies = df['movieId'].unique() 
users = df['userId'].unique() 
data_set = pd.DataFrame({'userId':users}) 
data_set = data_set.set_index('userId') 
for movie in movies: 
    data_set[movie] = 0 

enter image description here

所以现在我需要填写与相应等级的空间项目,但是这是一个混乱和缓慢的过程。

+2

尝试:'df.pivot(index ='userId',columns ='movieId',values ='rating')' – AChampion

回答

2

考虑数据帧df

df = pd.DataFrame([ 
     [1, 11, 1], 
     [1, 12, 5], 
     [2, 11, 3], 
     [2, 13, 4] 
    ], columns=['userid', 'movieid', 'rating']) 

选项1
pivot

df.pivot('userid', 'movieid', 'rating') 

选项2
​​unstack

df.set_index(['userid', 'movieid']).rating.unstack() 

两者得到

movieid 11 12 13 
userid     
1  1.0 5.0 NaN 
2  3.0 NaN 4.0 

然而,unstack方法具有fill_value参数,允许保持整数D型

df.set_index(['userid', 'movieid']).rating.unstack(fill_value=0) 

movieid 11 12 13 
userid    
1   1 5 0 
2   3 0 4