2016-05-30 100 views
0

在Python大熊猫据帧“DF”,我有以下三列:蟒蛇大熊猫据帧索引匹配

song_id | user_id | play_count 

我有我发明了基于play_count评级表(多少次用户听了一歌曲):

play_count | rating 
1-33  | 1 
34-66  | 2 
67-99  | 3 
100-199 | 4 
>200  | 5 

我想根据播放次数在此表中添加一列“评级”。 例如,如果play_count = 2,评分将为“1”。

所以它看起来像这样

song_id | user_id | play_count | rating 
X232 | u8347 | 2   | 1 
X987 | u3701 | 50   | 2 
X271 | u9327 | 10   | 1 
X523 | u1398 | 175  | 4 

在Excel中我会匹配/指数做到这一点,但我不知道如何做到这一点在Python /大熊猫。

它会是一个if/else循环和isin的组合吗?

回答

3

你需要一个像你这些范围的端点都需要在Excel中:

import numpy as np 
bins = [1, 33, 66, 99, 199, np.inf] 

然后你可以使用pd.cut找到对应的评价:

pd.cut(df['play_count'], bins=bins, include_lowest=True, labels=[1, 2, 3, 4, 5]).astype(int) 

我在末尾添加astype(int)因为pd.cut回报一个分类系列,所以你不能对它进行算术计算。

+0

很好,我只是做了这个df ['rating'] = pd.cut(df ['play_count'],bins = bins,include_lowest = True,labels = [1,2,3,4,5])。 astype(int),它的工作原理!非常感谢您的快速回复,非常有帮助!现在我可以创建一个内容过滤推荐模型 – jeangelj

+0

欢迎您。祝你模特好运。 :) – ayhan

0

我认为,如果你改变你的play_count表时使用的最大/最小值,这样的:

playcount

min | max | rating 
1 |33 | 1 
34 |66 | 2 
67 |99 | 3 
100 |199 | 4 
200 |np.inf | 5 
当然

需要import numpy as np

然后,你可以做一些事情像这样:

df['rating'] = play_count[(df['play_count'] >= play_count['min']) & (df['play_count'] <= play_count['max'])].rating