基于其他列条件和其他列的计算的数据帧新列值



我有一个df:

name  type   cost new
AB     B      1   0
CV     G      4   0 
54     B      31  0
AB     B      2   0

我想根据"名称"列是否为某个值重新分配"new"列的值,如果是,请根据"成本"列进行计算。

但是我正在尝试的不起作用:

df.loc[(df['type']=='G'),'new] = df["cost"]*0.75

基本上,如果类型是"G",那么新列应该是上面的计算。

我得到:"值错误:无法从重复轴重新索引">

你可以使用 np.where:

df['new'] = np.where(df['type'].eq('G'), df.cost * 0.75, 0)
print(df)

输出

name type  cost  new
0   AB    B     1  0.0
1   CV    G     4  3.0
2   54    B    31  0.0
3   AB    B     2  0.0

或者作为替代方案:

df['new'] = df['type'].eq('G') * (df.cost * 0.75)

请注意,为了使用,您必须导入numpy(import numpy as np(。

这是一个正确的方法:

df['new'] = df.loc[df['type'] == 'G', 'cost'] * .75
df['new'].fillna(0, inplace=True)

您还可以使用以下函数mask

df['new'] = df['new'].mask(df['type'] == 'G', df['cost'] * .75)

最新更新