2016-05-30 2 views
0

В питона панд dataframe «ДФ», У меня есть следующие три колонки:питона панды индекс dataframe матч

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 

В первенствует я хотел бы сделать это с матча/индекса, но я не знаю, как сделать это в 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 
Смежные вопросы