首页 > 解决方案 > 跨属性拆分熊猫数据框

问题描述

我有一个包含许多用户和许多项目的数据框,并且用户项目对有一个评分,尽管并非所有用户都对所有项目进行评分

userId    itemId    rating
1         1         4
1         5         3
1         2         5
2         5         2
2         4         4

我正在尝试测试一个推荐模型的性能,该模型根据用户对其他项目的评分将前 k 个项目返回给用户。拆分数据框的最简单方法是什么,以便我可以为某些用户子集制作评分最高的项目的测试集?

标签: pythonpandasdataframerecommender-systems

解决方案


这将为每个 UserId 提供两个评分最高的项目。您可以更改数字head()并查看https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.nlargest.html作为替代

data='''userId    itemId    rating
1         1         4
1         5         3
1         2         5
2         5         2
2         4         4'''
df = pd.read_csv(io.StringIO(data), sep=' \s+', engine='python')
df.sort_values('rating', ascending=False).groupby('userId').head(2)

输出

   userId  itemId  rating
2       1       2       5
0       1       1       4
4       2       4       4
3       2       5       2

推荐阅读