Создание новых столбцов в DataFrames при определенных условиях - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь создать новый столбец в моем фрейме данных, но его значения должны соответствовать некоторому правилу. Например, если значение переменной Venda меньше 200, тогда переменная Comissão должна быть 0.

if (df['Venda']<200):
    df['Comissão']=0
    df['Direito a Bonus']='Não'
elif (df['Venda']>=200) & (df['Venda']<250):
    df['Comissão']=0.5*df['Venda']
    df['Direito a Bonus']='Sim'
else:
    df['Comissão']=0.7*df['Venda']
    df['Direito a Bonus']='Sim'

Запустив этот код, я получаю ошибку:

Истинная ценность Серии неоднозначна. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Ответы [ 2 ]

2 голосов
/ 01 июня 2019

Использование Numpy.select () и Numpy.where () :

c1 = df['Venda']<200
c2 = df['Venda']<250

df['Comissão'] = np.select([c1, c2], [0, 0.5], default=0.7)*df['Venda']
df['Direito a Bonus'] = np.where(c1, 'Não', 'Sim')
0 голосов
/ 01 июня 2019

Вы можете использовать DataFrame.apply , а затем использовать pandas.concat , чтобы объединить их:

df=pd.DataFrame({'Venda':[100,150,200,205,210,250,251]})
print(df)
def check(val):
    if (val<200):
        return [0,'Não']
    elif ((val>=200) and (val<250)):
        return [0.5*val,'Sim']
    else:
        return [0.7*val,'Sim']

df2=pd.DataFrame(list(df.Venda.apply(check)), columns=['Comissão','Direito a Bonus'])
df=pd.concat([df,df2], axis=1)
print(df)

Выход:

   Venda
0    100
1    150
2    200
3    205
4    210
5    250
6    251

   Venda  Comissão Direito a Bonus
0    100       0.0             Não
1    150       0.0             Não
2    200     100.0             Sim
3    205     102.5             Sim
4    210     105.0             Sim
5    250     175.0             Sim
6    251     175.7             Sim
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...