2014-10-28 87 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