2016-05-30 134 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