Python 如何给出某些行';点数';取决于该行的大小';s列1与该行进行比较';s第2栏
我正在考虑创建一个算法,如果每小时的视图比平均每小时的视图大2倍,我给通道5分;如果它大3倍,我给这一行打10分,如果它大4倍,我给这一行打20分。我真的不知道该怎么做,我真的很感谢你的帮助Python 如何给出某些行';点数';取决于该行的大小';s列1与该行进行比较';s第2栏,python,pandas,multiplication,Python,Pandas,Multiplication,我正在考虑创建一个算法,如果每小时的视图比平均每小时的视图大2倍,我给通道5分;如果它大3倍,我给这一行打10分,如果它大4倍,我给这一行打20分。我真的不知道该怎么做,我真的很感谢你的帮助 df = pd.DataFrame({'channel':['channel1','channel2','channel3','channel4'], 'views_per_hour_today':[300,500,2000,100], 'average_views_per_hour':[100,200,2
df = pd.DataFrame({'channel':['channel1','channel2','channel3','channel4'], 'views_per_hour_today':[300,500,2000,100], 'average_views_per_hour':[100,200,200,50],'points': [0,0,0,0] })
df.loc[:, 'average_views_per_hour'] *= 2
df['n=2'] = np.where((df['views_per_hour'] >= df['average_views_per_hour']) , 5, 0)
df.loc[:, 'average_views_per_hour'] *= 3
df['n=3'] = np.where((df['views_per_hour'] >= df['average_views_per_hour']) , 5, 0)
df.loc[:, 'average_views_per_hour'] *= 4
df['n=4'] = np.where((df['views_per_hour'] >= df['average_views_per_hour']) , 10, 0)
我希望能够为“Points”列中的每一行添加n=2、n=3、n=4列的结果,但这些列总是显示5或10,而从不显示0(代码认为每小时的视图总是大于每小时的平均视图,即使每小时的平均视图乘以一个大整数)解决这类问题有多种方法。您可以使用numpy select,它具有更简洁的语法,还可以定义函数并应用于数据帧
div = df['views_per_hour_today']/df['average_views_per_hour']
cond = [(div >= 2) & (div < 3), (div >= 3) & (div < 4), (div >= 4) ]
choice = [5, 10, 20]
df['points'] = np.select(cond, choice)
channel views_per_hour_today average_views_per_hour points
0 channel1 300 100 10
1 channel2 500 200 5
2 channel3 2000 200 20
3 channel4 100 50 5
div=df['今天每小时的浏览量]/df['每小时的平均浏览量']
cond=[(div>=2)和(div<3),(div>=3)和(div<4),(div>=4)]
选择=[5,10,20]
df['points']=np.select(条件,选项)
频道每小时观看次数今天平均每小时观看次数点数
0频道1300 100 10
1频道2500 200 5
2频道3 2000 200 20
3渠道410050