Python Pandas如何对同一DataFrame的两列执行运算并生成新列
报错原因
- 参数定义错误:使用
df.apply(..., axis=1)时,lambda函数每次仅接收1个参数(代表当前行的Series对象),你声明了x, y两个入参,导致缺少参数报错。 - 运算逻辑问题:你写的
x-y/y按照运算优先级会先计算y/y,等价于x-1,不符合ROI(投资回报率)的常规计算逻辑,正确公式应为(Faturamento - Custo) / Custo,如果确实需要你写的原始逻辑可以自行调整公式部分。
正确实现
方案1:推荐使用向量化运算(性能远高于apply)
直接对DataFrame的列做批量运算即可,代码更简洁运行更快:
df['Roi'] = (df['Faturamento'] - df['Custo']) / df['Custo']
如果确实要使用你原始的x - y/y逻辑,代码改为:
df['Roi'] = df['Faturamento'] - df['Custo']/df['Custo']
方案2:apply的正确写法
如果一定要用apply实现,lambda仅需接收1个行参数即可:
df['Roi'] = df.apply(lambda row: (row['Faturamento'] - row['Custo']) / row['Custo'], axis=1)
内容的提问来源于stack exchange,提问作者Carol Vieira
相关产品推荐
相关产品推荐

