Создание нового столбца с логическими операторами - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь создать новый столбец, который будет назначать «Пять или больше», «Минус пять или меньше», «Между пятью и минус пять» с этим другим столбцом в качестве входных данных:

df['Change']
Out[196]: 
0       -0.398010
1       -3.980227
2        1.475952
3        0.000000
4       -2.043446

31514         NaN
31515         NaN
31516         NaN
31517         NaN
31518         NaN
Name: Change, Length: 30811, dtype: float64

Я пробовал:

df['new_column'] = df.apply(lambda x: 'Five Or More' if (df['Change'] >= 5) else 'Between Five And Minus Five')
df['new_column'] = df.apply(lambda x: 'Minus Five Or Less' if (df['Change'] <= 5) else 'Between Five And Minus Five')

Для обоих я получаю эту ошибку:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Спасибо всем, кто помогает!

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Измените это, чтобы исправить вашу лямбда-функцию?

df['new_column'] = df['Change'].apply(lambda x: 'Five Or More' if (x >= 5) else 'Between Five And Minus Five')

В вашей лямбда-функции вам нужно использовать x, если вы устанавливаете лямбда x, и применение должно быть в столбце, а не сам df. Проверьте это для получения дополнительной информации https://datatofish.com/if-condition-in-pandas-dataframe/

Другой способ сделать это - создать функцию ваших условий и применить эту функцию к вашему фрейму данных следующим образом:

def conditions(x):
    if(x>=5):
        return 'Five or More'
    elif(x<=-5):
        return 'Minus Five or Less'
    else:
        return 'Between Five And Minus Five'

df['new_column'] = df['Change'].apply(conditions)

0 голосов
/ 09 мая 2020

Попробуйте это

df['new_column'] = df["Change"].apply(lambda x: 'Five Or More' if (x>= 5) else 'Between Five And Minus Five')
df['new_column'] = df["Change"].apply(lambda x: 'Minus Five Or Less' if (x <= -5) else 'Between Five And Minus Five')
...