【问题标题】:Rating normalisation评级标准化
【发布时间】:2014-12-23 13:46:15
【问题描述】:

我有下一个 pandas DataFrame df:

user item rating
1    1    1
1    2    1
1    3    3
2    1    2
2    2    2
2    3    1
...

我想规范化评分,定义0到1之间的所有评分值。方法很简单,只需将某个用户的每个值除以该用户的最大值即可。

我已经创建了下一个代码:

ratingNormalised = []

for user in df['user'].unique:
    dfUser = df[df['user'] == user]
    userNormalised = (dfUser['rating']/max(dfUser['rating'])).tolist()
    ratingNormalised.extend(userNormalised)

df['ratingNorm'] = Series(ratingNormalised, index=df.index)

是否有可能找到一些更好的解决方案,它可能更 Pythonic?

【问题讨论】:

    标签: python for-loop pandas


    【解决方案1】:

    按用户分组并应用 lambda:

    In [73]:
    
    df['norm rating'] = df.groupby('user')['rating'].apply(lambda x: x/x.max())
    df
    
    Out[73]:
       user  item  rating  norm rating
    0     1     1       1     0.333333
    1     1     2       1     0.333333
    2     1     3       3     1.000000
    3     2     1       2     1.000000
    4     2     2       2     1.000000
    5     2     3       1     0.500000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      相关资源
      最近更新 更多