В pandas, могу ли я избежать al oop при присвоении значения на основе определенных значений строки c? - PullRequest
1 голос
/ 21 июня 2020

У меня есть три столбца: ['date'] с датой, ['id'], который содержит идентификаторы продукта, и ['rating'], который содержит рейтинги продуктов для каждого продукта для каждой информации, я хочу создать фиктивный переменная ['threshold'], которая равна 1, когда в пределах того же значения ['id'] значение рейтинга изменяется от любого места выше 5 до любого места ниже 6. Мой код будет использовать a для l oop следующим образом:

df['threshold']=np.zeros(df.shape[0])
for i in range(df.shape[0]):
        if df.iloc[i]['id'] == df.iloc[i-1]['id'] and df.iloc[i-1]['rating']>5 and df.iloc[i]['rating']<6:
            df.iloc[i]['threshold']=1

Есть ли способ сделать это без использования для l oop?

1 Ответ

1 голос
/ 21 июня 2020

Используйте Series.shift и сравните с Series.eq для равного и конвертируйте маску вывода в целые числа 0,1 на Series.view:

df['threshold']= (df['id'].eq(df['id'].shift()) & 
                  df['rating'].shift().gt(5) & 
                  df['rating'].lt(6)).view('i1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...