根据熊猫中的多个条件添加新的数据框

时间:2020-10-08 14:22:57

标签: 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 个答案:

答案 0 :(得分:3)

让我们尝试透视表以计算总播放量,然后使用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