将mongodb集合转换为熊猫数据帧

时间:2017-01-21 00:01:06

标签: python mongodb pandas dataframe

我有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数据帧,每个单元格的值实际上是电影的速率,每行属于空单元格指示的一个用户数据,该用户不对该电影进行评级 enter image description here

如何以最有效的方式生成此数据框

1 个答案:

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