2017-01-21 3 views
0

У меня есть коллекция MongoDB показывают каждый скорость кино пользователя:новообращенной коллекция MongoDB для панды dataframe

[ 
{ 
    "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» для каркасных данных столбцов. Теперь я хочу, чтобы создать рамку панды данных, как показано на рисунке ниже, значение каждой ячейки на самом деле скорость фильма и каждой строки принадлежат одному пользовательских данных пустая ячейка указывает, что пользователь не оценить этот фильм enter image description here

Как создать этот фрейм данных наиболее эффективным способом

ответ

0

учитывая данные, при условии, что хранится в переменной с именем data и предполагая, что идентификаторы пользователя определяются индексом рейтинга в 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 туда, где значения должны быть рейтинги, столбцы должны быть идентификаторы кино и индекс строки определяет идентификаторы пользователя.

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 
Смежные вопросы