重新排列 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
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.
我正在尝试根据 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
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
。更好的示例解释是