2016-05-30 2 views
0

Dans un Pandas python dataframe « df », j'ai les trois colonnes suivantes:Pandas python index dataframe match

song_id | user_id | play_count 

J'ai une table de notation J'inventée pour play_count (combien de fois un utilisateur écouté un chanson):

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

J'essaye d'ajouter une colonne «estimation» à cette table basée sur le compte de jeu. Par exemple, si play_count = 2, la note sera "1".

Il semble donc que cette

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

Dans Excel je faire avec correspondance/index, mais je ne sais pas comment le faire en python/pandas géants.

Serait-ce une combinaison d'une boucle if/else et isin?

Répondre

3

Vous avez besoin des critères d'évaluation de ces gammes comme vous auriez besoin dans Excel:

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

Ensuite, vous pouvez utiliser pd.cut pour obtenir la note correspondante:

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

I ajouté astype(int) à la fin parce que les rendements de pd.cut une série catégorique de sorte que vous ne pouvez pas faire des calculs arithmétiques à ce sujet.

+0

Très bien, je viens de faire ce df ['rating'] = pd.cut (df ['play_count'], bins = bins, include_lowest = Vrai, labels = [1, 2, 3, 4, 5]). astype (int) et ça marche! Merci beaucoup pour la réponse rapide, très utile! Maintenant, je peux créer un modèle de recommandation de filtrage de contenu – jeangelj

+0

Vous êtes les bienvenus. Bonne chance pour votre modèle. :) – ayhan

0

Je pense que si vous changez vos tables play_count utiliser valeurs min/max, comme ceci:

playcount:

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

Bien sûr, vous devez import numpy as np

Ensuite, vous pouvez faire quelque chose comme ceci:

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