如何为groupby movieID添加平均值列?

时间:2019-04-06 02:49:50

标签: python pandas mean

我有一个类似下面的df

    userId      movieId rating  
0   1       31          2.0 
1   2       10          4.0 
2   2       17          5.0 
3   2       39          5.0 
4   2       47          4.0 
5   3       31          3.0
6   3       10          2.0

我需要添加两列,一列是每部电影的mean,另一列是diff,这是评分与平均值之间的差。

请注意,movieId可以重复,因为不同的用户可能会评价同一部电影。这里的第0行和第5行用于movieId 31,第1行和第6行用于movieId 10

    userId  movieId rating  mean   diff  
0     1   31      2.0      2.5       -0.5
1     2   10      4.0      3         1
2     2   17      5.0      5         0
3     2   39      5.0      5         0
4     2   47      4.0      4         0
5     3   31      3.0      2.5       0.5
6     3   10      2.0      3         -1

这是我的一些计算均值的代码

df = df.groupby('movieId')['rating'].agg(['count','mean']).reset_index()

1 个答案:

答案 0 :(得分:1)

使用transform计算平均值时,可以使用groupby保持相同的行数。计算差异很简单:

df['mean'] = df.groupby('movieId')['rating'].transform('mean')
df['diff'] = df['rating'] - df['mean']