我有mongodb收集指示每个用户电影的费率:
[
{
"movie_rate" : [
{
"rate" : 4,
"movie_id" : "608"
},
{
"rate" : 4,
"movie_id" : "1246"
}
]
},
{
"movie_rate" : [
{
"rate" : 5,
"movie_id" : "1136"
},
{
"rate" : 4,
"movie_id" : "2081"
}
]
},
{
"movie_rate" : [
{
"rate" : 5,
"movie_id" : "2947"
},
{
"rate" : 5,
"movie_id" : "1240"
}
]
}
]
我有' movie_id'用于数据框列。现在我想创建像下图所示的pandas数据帧,每个单元格的值实际上是电影的速率,每行属于空单元格指示的一个用户数据,该用户不对该电影进行评级
如何以最有效的方式生成此数据框
答案 0 :(得分:0)
鉴于您提供的数据存储在名为data
的变量中,并假设用户ID由data
数组中的评级索引给出,您可以执行以下步骤:
首先以矩阵形式转换数据
df = pd.concat(map(lambda x: DataFrame(x[1]['movie_rate'], index=np.repeat(x[0], 2)), enumerate(data)))
df.index.name = 'user'
df
movie_id rate
user
0 608 4
0 1246 4
1 1136 5
1 2081 4
2 2947 5
2 1240 5
然后使用pivot_table
方法将值设为评级,列应为影片ID,行索引定义用户ID。
df.pivot_table('rate', columns='movie_id', index=df.index)
movie_id 1136 1240 1246 2081 2947 608
user
0 NaN NaN 4.0 NaN NaN 4.0
1 5.0 NaN NaN 4.0 NaN NaN
2 NaN 5.0 NaN NaN 5.0 NaN