重新排列 pandas 数据框以创建二维评分矩阵

Rearrange a pandas data frame to create a 2d ratings matrix

我正在尝试根据 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 

我觉得你需要pivot with fillna

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

如果:

ValueError: Index contains duplicate entries, cannot reshape

然后使用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。更好的示例解释是 and in docs.