Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何给出某些行';点数';取决于该行的大小';s列1与该行进行比较';s第2栏_Python_Pandas_Multiplication - Fatal编程技术网

Python 如何给出某些行';点数';取决于该行的大小';s列1与该行进行比较';s第2栏

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

我正在考虑创建一个算法,如果每小时的视图比平均每小时的视图大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,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