【问题标题】:How to calculate the mean of ratings of each user?如何计算每个用户的评分平均值?
【发布时间】:2016-03-28 08:22:48
【问题描述】:

假设我有一个这样的数据集:

userID productID rating
a          i       5
b          i       4
c          i       4 
a          j       3
b          j       5

问题是,如何计算每个用户的平均评分? 我看到了this answer,但我不太明白。如果您提供一些指导,我将非常感谢您的时间。

【问题讨论】:

  • 请发帖Minimal, Complete, and Verifiable example。所有相关部分都应该在您的问题中,而不是在链接中(目前不起作用)。
  • 我仔细检查了链接,它们有效。我想我给出的例子很少。我试过了。对不起,我是初学者。
  • 好的。链接之一现在有效。另一个仍然给出对不起,出了点问题。这可能会自行解决。但是工作簿真的很大。当您发布自包含问题和迄今为止的尝试时,您将获得最快和最好的答案。
  • 谢谢。我删除了链接。让我们专注于上面的例子。因为它非常接近我正在处理的数据。

标签: arrays python-2.7 pandas mean


【解决方案1】:

我在 IPython Notebook 中工作。

假设你有这个文件user_ratings.csv:

userID productID rating
a          i       5
b          i       4
c          i       4
a          j       3
b          j       5

链接中的示例使用熊猫。所以导入熊猫:

In [1]: import pandas as pd

将您的文件读入数据框:

In [2]: df = pd.read_csv('user_ratings.csv', delim_whitespace=True)
df 

按用户分组并计算每个用户的平均值:

In [2]: df.groupby('userID').mean()

您还可以在 df 中创建一个名为 user_avg_rating 的新列,并将每个用户的平均分数分配给它:

In [3]:  df['user_avg_rating'] = df.groupby('userID')['rating'].transform('mean')
         df

transform 方法获取您的分组对象并创建一个系列:

In [4]:  df.groupby('userID')['rating'].transform('mean')

    0    4.0
    1    4.5
    2    4.0
    3    4.0
    4    4.5
    dtype: float64

这个系列被分配到列user_avg_rating。

【讨论】:

  • 非常感谢!另一个小问题:如何将这个平均评分列添加到第一个数据集中?我假设代码将是这样的? -- df['user_avg_rating'] = df.groupby('user_id')['user_id'].transform('mean')
  • 在我的问题中添加了一个示例。
  • 如果能解决你的问题,你可以accept回答。
  • 谢谢你帮助我,迈克!
  • 亲爱的 Mike,代码运行良好,再次感谢!
猜你喜欢
  • 2017-02-16
  • 2018-01-04
  • 1970-01-01
  • 2013-07-31
  • 2020-07-23
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多