重新排列pandas数据框以创建2D评级矩阵

时间:2016-06-01 18:50:33

标签: python pandas dataframe recommendation-engine yelp

我试图从yelp数据集构建基于项目的推荐系统。我设法将数据处理到一定程度,我在给定状态下审查餐馆的所有用户给出了评级。最终我想达到这样的程度,即我在一个轴上有餐厅,另一个用户有评级矩阵,中间评分(1-5)(缺少评论为零)。

现在DF看起来像这样:

               user_id               review_id             business_id  stars
0  Xqd0DzHaiyRqVH3WRG7  15SdjuK7DmYqUAj6rjGowg  vcNAWiLM4dR7D2nwwJ7nCA      5
1  Xqd0DzHaiyRqVH3WRG7  15SdjuK7DmYqUAj6rjGowg  vcNAWiLM4dR7D2nwwJ7nCA      5
2  H1kH6QZV7Le4zqTRNxo  RF6UnRTtG7tWMcrO2GEoAg  vcNAWiLM4dR7D2nwwJ7nCA      2
3  zvJCcrpm2yOZrxKffwG  -TsVN230RCkLYKBeLsuz7A  vcNAWiLM4dR7D2nwwJ7nCA      4
4  KBLW4wJA_fwoWmMhiHR  dNocEAyUucjT371NNND41Q  vcNAWiLM4dR7D2nwwJ7nCA      4
5  zvJCcrpm2yOZrxKffwG  ebcN2aqmNUuYNoyvQErgnA  vcNAWiLM4dR7D2nwwJ7nCA      4
6  Qrs3EICADUKNFoUq2iH  _ePLBPrkrf4bhyiKWEn4Qg  vcNAWiLM4dR7D2nwwJ7nCA      1

但我希望它看起来更像这样:

(4家餐厅x 5位用户)

0 4 3 4 5
3 3 3 2 1 
1 2 3 4 5
0 5 3 3 4 

1 个答案:

答案 0 :(得分:3)

我认为pivot需要fillna

print (df.pivot(index='business_id', columns='user_id', values='stars').fillna(0))

如果:

  

ValueError:索引包含重复的条目,无法重塑

然后使用pivot_table

print (df.pivot_table(index='business_id', columns='user_id', values='stars').fillna(0))
user_id                 H1kH6QZV7Le4zqTRNxo  KBLW4wJA_fwoWmMhiHR  \
business_id                                                        
vcNAWiLM4dR7D2nwwJ7nCA                    2                    4   

user_id                 Qrs3EICADUKNFoUq2iH  Xqd0DzHaiyRqVH3WRG7  \
business_id                                                        
vcNAWiLM4dR7D2nwwJ7nCA                    1                    5   

user_id                 zvJCcrpm2yOZrxKffwG  
business_id                                  
vcNAWiLM4dR7D2nwwJ7nCA                    4  

pivot_table使用aggfunc,如果重复,则默认为aggfunc=np.mean。样本的更好解释是heredocs