获取特定行的均值并将其存储

时间:2020-04-10 20:46:09

标签: python pandas dataframe mean rating

我有一个看起来像这样的数据框:

   userId     id      rating
   1          110     1.0
   2          141     3.0
   2          260     4.5
   2          1092    2.5
   3          223     4.0

我有一个所有userId的列表,存储在users_list中。

它非常长(100万行),我正在尝试获取每位用户的平均评分并将其存储:

  • 与以前在相同的users_list中,但成对出现
    • 像[[userId1,meanRating],[userId2,meanRating],...]
  • 作为DataFrame中的一项功能,因此每一行都具有该特定用户的平均评分(我可以删除每位用户除1外的所有行)

我可以使用df.loc[df['userId'] == users_list[someId]]['rating'].mean()获得平均评级,但是如果我尝试将其存储在某个地方,则会出现错误,我试图在副本上设置值。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

以下是带有两个选项的答案:

如果您想让原始数据框的均值列

df = df.merge(df.groupby('userId')['rating'].mean().reset_index().rename(columns={'rating':'mean'}), on='userId')

   userId    id  rating      mean
0       1   110     1.0  1.000000
1       2   141     3.0  3.333333
2       2   260     4.5  3.333333
3       2  1092     2.5  3.333333
4       3   223     4.0  4.000000

如果您想要一个仅包含用户ID和均值的新数据框

df = df.groupby('userId')['rating'].mean().reset_index().rename(columns={'rating':'mean'})

   userId      mean
0       1  1.000000
1       2  3.333333
2       3  4.000000