我有一个电影评级数据集,如下所示:
我想将此映射到一个矩阵,其中用户ID中的索引,列是moviesids,值是评级。
到目前为止,我所做的是:
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
所以现在我需要用相应的评级填充那些空格项目,但这是一个混乱而缓慢的过程。
答案 0 :(得分: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
set_index
+ 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
参数,允许保留整数dtype
df.set_index(['userid', 'movieid']).rating.unstack(fill_value=0)
movieid 11 12 13
userid
1 1 5 0
2 3 0 4