我有一个类似下面的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()
答案 0 :(得分:1)
使用transform
计算平均值时,可以使用groupby
保持相同的行数。计算差异很简单:
df['mean'] = df.groupby('movieId')['rating'].transform('mean')
df['diff'] = df['rating'] - df['mean']