我有一个数据框,其中包含有关一段时间内用户评分项目的信息。它具有以下相似之处:
在数据框中,我有许多行具有相同的“ user_id”和“ business_id”,我可以使用以下代码进行检索:
mask = reviews_df.duplicated(subset=['user_id','business_id'], keep=False)
dup = reviews_df[mask]
获得这样的东西:
现在,我需要从原始数据框中删除所有这些重复项,并用平均值代替它们。有没有一种快速而优雅的方法来实现这一目标?
最佳答案
硒,如果您有一个数据框看起来像
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.0
关于python - Pandas 计算满足条件的行的列平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58081592/