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

mme*_*era 5 python recommendation-engine dataframe pandas 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
Run Code Online (Sandbox Code Playgroud)

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

(4 家餐厅 x 5 位用户)

0 4 3 4 5
3 3 3 2 1 
1 2 3 4 5
0 5 3 3 4 
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

我认为你需要pivotfillna

print (df.pivot(index='business_id', columns='user_id', values='stars').fillna(0))
Run Code Online (Sandbox Code Playgroud)

如果:

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  
Run Code Online (Sandbox Code Playgroud)

但是pivot_table使用aggfunc,默认是aggfunc=np.mean如果重复。更好的示例解释在此处文档中