我有一个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)