добавление нового фрейма данных на основе нескольких условий в pandas

#python #pandas #numpy

#python #pandas #numpy

Вопрос:

Привет, у меня есть такие данные:

например

 id        genre    total_play
1         pop      20
1         rock     30
1         jazz     60
2         pop      60
2         country  30
2         rock     25
3         latin    25
3         kpop     25
3         folk     10
  

Я хочу создать новый столбец на основе следующих правил:

  • Если пользователь слушает джазовую музыку более 30% от общего воспроизведения, она будет помечена категорией A
  • Если пользователь слушает поп-музыку более 40% от общего воспроизведения, он будет помечен категорией B
  • Кроме этого, тогда C

и будет выглядеть так:

 id   tendency
1    A
2    B
3    C
  

Спасибо раньше 🙂

Ответ №1:

Давайте попробуем повернуть таблицу, чтобы вычислить общее количество воспроизведений, а затем использовать np.select :

 plays  = df.pivot_table('total_play','id','genre',fill_value=0)
totals = plays.sum(1)

pd.Series(np.select([plays['jazz']>totals*0.3, plays['pop'] > totals*0.4],['A','B'],'C'),
          index=plays.index)
  

Вывод:

 id
1    A
2    B
3    C
dtype: object