在某些条件下在数据帧中创建新列

2024-06-18 13:12:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的数据框中创建一个新列,但是它的值必须遵循一些规则。例如,如果变量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'

运行此代码,我得到错误:

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


Tags: the数据代码dfif规则错误sim
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')

您可以使用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

相关问题 更多 >