python - 跨属性拆分熊猫数据框
问题描述
我有一个包含许多用户和许多项目的数据框,并且用户项目对有一个评分,尽管并非所有用户都对所有项目进行评分
userId itemId rating
1 1 4
1 5 3
1 2 5
2 5 2
2 4 4
我正在尝试测试一个推荐模型的性能,该模型根据用户对其他项目的评分将前 k 个项目返回给用户。拆分数据框的最简单方法是什么,以便我可以为某些用户子集制作评分最高的项目的测试集?
解决方案
这将为每个 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
推荐阅读
- kubernetes - 这个函数在 Kubernetes 中的目的是什么?
- python - Python 命令有模式吗?
- drools - 可以使用调试事件侦听器将 Drools 的默认 stderr 输出更改为 stdout 中的 INFO 吗?
- ruby-on-rails - 使用与 Ember 应用程序中可用的端点相同的系统保护文件
- javascript - 如何在 JSContext 中修改 Swift 对象
- javascript - 如何在 JavaScript 中生成这种滴答声?
- ionic-framework - Ionic 应用程序未从设备上的 JSON 数据库获取数据,但在实验室中
- google-sheets - 如何查询包含'的单元格引用
- c# - jsonserializationexception:无法反序列化当前的json对象(例如{"name":"value"})
- python - 如何在将 GridSearchCV 与 TimeSeriesSplit 一起使用时正确使用 Scaler