#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