我正在尝试在数据框中创建一个新列,但是其值必须遵循某些规则。例如,如果变量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()。
答案 0 :(得分:2)
使用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')
答案 1 :(得分:0)
您可以使用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