在某些情况下在DataFrames中创建新列

时间:2019-06-01 03:16:06

标签: python pandas if-statement

我正在尝试在数据框中创建一个新列,但是其值必须遵循某些规则。例如,如果变量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 个答案:

答案 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