我有一个数据框,其中包含一段时间内用户评分项目的信息。它具有以下外观:

在数据帧中,有许多行具有相同的'user_id‘和'business_id’,我使用以下代码检索它们:
mask = reviews_df.duplicated(subset=['user_id','business_id'], keep=False)
dup = reviews_df[mask]获取类似如下的内容:

现在,我需要从原始数据帧中删除所有这些重复项,并将它们替换为它们的平均值。有没有一种快速而优雅的方法来实现这一点?谢谢!
发布于 2019-09-24 22:00:21
Se如果您确实有数据帧,则如下所示
review_id user_id business_id stars date
0 1 0 3 2.0 2019-01-01
1 2 1 3 5.0 2019-11-11
2 3 0 2 4.0 2019-10-22
3 4 3 4 3.0 2019-09-13
4 5 3 4 1.0 2019-02-14
5 6 0 2 5.0 2019-03-17那么解决方案应该是这样的:
df.loc[df.duplicated(['user_id', 'business_id'], keep=False)]\
.groupby(['user_id', 'business_id'])\
.apply(lambda x: x.stars - x.stars.mean())结果如下:
user_id business_id
0 2 2 -0.5
5 0.5
3 4 3 1.0
4 -1.0https://stackoverflow.com/questions/58081592
复制相似问题