Как дать точкам определенные строки в зависимости от того, насколько больше столбец 1 этой строки по сравнению со столбцом 2 этой строки - PullRequest
1 голос
/ 26 марта 2019

Я смотрю на создание алгоритма, где, если views_per_hour в 2 раза больше, чем Average_views_per_hour, я даю каналу 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)

Я ожидал, что смогу суммировать результаты из столбцов n = 2, n = 3, n = 4 для каждой строки в столбце «Точки», но столбцы всегда показывают либо 5, либо 10, а не 0 ( Код считает, что views_per_hour всегда больше, чем average_views_per_hour, даже когда average_views_per_hour умножается на большое целое число.)

1 Ответ

1 голос
/ 26 марта 2019

Существует множество способов решения такого рода проблем.Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...