将三行数据映射到矩阵中

时间:2017-03-03 05:03:31

标签: python pandas pivot-table

我有一个电影评级数据集,如下所示:

enter image description here

我想将此映射到一个矩阵,其中用户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

enter image description here

所以现在我需要用相应的评级填充那些空格项目,但这是一个混乱而缓慢的过程。

1 个答案:

答案 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