реализация нескольких условий if else в кадре данных pandas - PullRequest
2 голосов
/ 14 июля 2020

Мой фрейм данных -

id       score
1          50
2          88
3          44
4          77
5          93

Я хочу, чтобы мой фрейм данных выглядел так -

id       score      is_good
1          50        low
2          88        high
3          44        low
4          77        medium
5          93        high

Я выполнил следующий код -

def selector(row):
    if row['score'] >= 0 and row['score'] <= 50 :
        return "low"
    elif row['score'] > 50 and row['score'] <=80 :
        return "medium"
    else:
        return "high"

x['is_good'] = x.apply(lambda row : selector(x), axis=1)

Я думаю, что logi c в порядке, но код не работает. Может быть, мы можем использовать функцию карты.

Ответы [ 3 ]

6 голосов
/ 14 июля 2020

Это хороший вариант использования pd.cut:

df['is_good'] = pd.cut(df.score, 
                       [-np.inf,50,80,np.inf], 
                       labels=['low','medium','high'])
print(df)
   id  score is_good
0   1     50     low
1   2     88    high
2   3     44     low
3   4     77  medium
4   5     93    high
2 голосов
/ 14 июля 2020

Вы можете использовать, np.where + Series.between

import numpy as np

df['is_good'] = (
    np.where(df.score.between(0, 50), "low",
             np.where(df.score.between(51, 80), "medium", "high"))
)

   id  score is_good
0   1     50     low
1   2     88    high
2   3     44     low
3   4     77  medium
4   5     93    high
1 голос
/ 14 июля 2020

В вашем коде есть ошибка из-за:

x['is_good'] = x.apply(lambda row : selector(x), axis=1)

должно быть:

x['is_good'] = x.apply(lambda row : selector(row), axis=1)

Были взяты серии, а не строки, поэтому вы получили ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...