我有一个df:
name type cost new
AB B 1 0
CV G 4 0
54 B 31 0
AB B 2 0
我想基于“名称”列是否为某个值来重新分配“新”列的值,如果是,则基于“成本”列进行计算。
但是我正在尝试的方法不起作用:
df.loc[(df['type']=='G'),'new] = df["cost"]*0.75
基本上,如果类型为'G',则新列应为上面的计算。
我得到:'ValueError:无法从重复的轴重新索引'
答案 0 :(得分:2)
您可以使用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
)。
答案 1 :(得分:0)
这是正确的方法:
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)