【问题标题】:How to find average score for each movie based on reviews - Python如何根据评论找到每部电影的平均分数 - Python
【发布时间】:2020-05-18 14:54:21
【问题描述】:

我有这样的数据框。

    UserID  Review      MovieID
0   10112   Good        MOV001
1   10112   Excellent   MOV002
2   10112   Average     MOV003
3   10113   Good        MOV001
4   10113   Bad         MOV002
5   10113   Good        MOV003
6   10113   Excellent   MOV004
7   10114   Good        MOV001
8   10114   Bad         MOV002
9   10114   Good        MOV003
10  10114   Excellent   MOV004

我已将评论更改为 int 值。

movies.Review[movies.Status == 'Average'] = 2
movies.Review[movies.Status == 'Good'] = 3
movies.Review[movies.Status == 'Excellent'] = 5
movies.Review[movies.Status == 'Very Good'] = 4
movies.Review[movies.Status == 'Okay'] = 1
movies.Review[movies.Status == 'Bad'] = 0
movies

现在我的数据框将如下所示,

UserID  Review      MovieID
0   10112   3           MOV001
1   10112   5           MOV002
2   10112   2           MOV003
3   10113   3           MOV001
4   10113   0           MOV002
5   10113   3           MOV003
6   10113   5           MOV004
7   10114   3           MOV001
8   10114   0           MOV002
9   10114   3           MOV003
10  10114   5           MOV004

现在如何根据评论找到每部电影的平均分数?谁能帮帮我?

【问题讨论】:

  • groupby.mean??
  • 你能帮我写代码吗?
  • 根据您设置分数的逻辑,查看np.select
  • 是的,如前所述,您需要groupby.mean
  • 类似movies.groupby('MovieID').mean()

标签: python python-3.x pandas dataframe recommendation-engine


【解决方案1】:

首先,您不需要那些movies.Review[movies.Status==...] = ...。请改用np.selectmap

Status_convert = {'Bad':0, 'Okay':1, 'Average':2,
                   'Good':3, 'Very Good':4, 'Excellent':5}
movies['Review'] = movies.Status.map(Status_convert)

那么你可以这样做:

df.groupby('MovieID')['Review'].mean()

输出:

MovieID
MOV001    3.000000
MOV002    1.666667
MOV003    2.666667
MOV004    5.000000
Name: Review, dtype: float64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多