列匹配时,从另一个中减去数据帧

时间:2019-03-16 15:19:47

标签: pandas

我有一个数据框(电影数据集)

 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循环的方法?

1 个答案:

答案 0 :(得分:0)

我认为您需要GroupBy.transformmean用于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