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

时间:2019-12-09 20:06:22

标签: python dataframe

我有一个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:无法从重复的轴重新索引'

2 个答案:

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