我有一个数据框(电影数据集)
user_mean = self.data_train['rating'].groupby(self.data_train['userId']).mean()
(Pdb) user_mean.head()
userId
1 2.527778
2 3.426471
3 3.588889
4 4.363158
5 3.908602
我发现了每个用户的评分平均值
dict.keys()
我想从匹配用户的第一个数据帧中减去该平均值。
有没有没有明确的for循环的方法?
答案 0 :(得分:0)
我认为您需要GroupBy.transform
和mean
用于Series
,其大小与原始DataFrame
相同,因此可以用Series.sub
减去列:
s = self.data_train.groupby('userId')['rating'].transform('mean')
self.data_train['new'] = self.data_train['rating'].sub(s)
样本:更改了userId
中的数据以获得更好的样本
print (data_train)
userId movieId rating timestamp
65414 466 608 4.0 945139883
79720 466 6218 4.0 1089518106
63354 457 4007 3.5 1471383787
29923 466 59333 2.5 1462636955
63651 457 102194 2.5 1471383710
s = data_train.groupby('userId')['rating'].transform('mean')
print (s)
65414 3.5
79720 3.5
63354 3.0
29923 3.5
63651 3.0
Name: rating, dtype: float64
data_train['new'] = data_train['rating'].sub(s)
print (data_train)
userId movieId rating timestamp new
65414 466 608 4.0 945139883 0.5
79720 466 6218 4.0 1089518106 0.5
63354 457 4007 3.5 1471383787 0.5
29923 466 59333 2.5 1462636955 -1.0
63651 457 102194 2.5 1471383710 -0.5