我在Python Pandas中使用Movie Lens Dataset。我需要在foll中打印u.data
一个制表符分隔文件的矩阵。方式
NULL MovieID1 MovieID2 MovieID3
UserID1 Rating Rating Rating
UserID2 Rating Rating Rating
我已经通过以下链接
了df.iloc
和df.ix
我需要输出,因为它显示了电影w.r.t的评级和NaN(未评级时)。用户。
NULL MovieID1 MovieID2 MovieID3
UserID1 Rating Rating NaN
UserID2 Rating NaN Rating
P.S。我不介意使用numpy,crab,recsys,csv或任何其他python包解决方案
编辑1 - 对数据进行排序并导出,但得到了一个额外的字段
df2 = df.sort_values(['UserID','MovieID'])
print type(df2)
df2.to_csv("sorted.csv")
print df2
该文件生成foll。 sorted.csv 文件
,UserID,MovieID,Rating,TimeStamp
32236,1,1,5,874965758
23171,1,2,3,876893171
83307,1,3,4,878542960
62631,1,4,3,876893119
47638,1,5,3,889751712
5533,1,6,5,887431973
70539,1,7,4,875071561
31650,1,8,1,875072484
20175,1,9,5,878543541
13542,1,10,3,875693118
编辑2 - 正如评论中所述
这里是u.data文件中用作输入的数据格式
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
298 474 4 884182806
115 265 2 881171488
253 465 5 891628467
305 451 3 886324817
答案 0 :(得分:2)
一种方法:
使用pivot_table,如果每个用户和电影ID一个值,那么aggfunc并不重要,但如果有多个值,则选择您的聚合。
df.pivot_table(values='Rating',index='UserID',columns='MovieID', aggfunc='mean')
第二种方法(没有重复的用户ID,movieid记录):
df.set_index(['UserID','MovieID'])['Rating'].unstack()
第三种方法(没有重复的用户ID,movieid记录):
df.pivot(index='UserID',columns='MovieID',values='Rating')
第四种方法(就像你可以选择聚合方法的第一种方法):
df.groupby(['UserID','MovieID'])['Rating'].mean().unstack()
输出:
MovieID 1 2 3 4 5 6 7 8 9 10
UserID
1 5 3 4 3 3 5 4 1 5 3