2014-10-28 25 views
1

我旁边大熊猫数据帧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) 

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

回答

1

GROUPBY用户和应用的λ:

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 
+0

再次感谢你,需要使用lambda函数。 – Guforu 2014-10-28 09:14:22