Pandas 中带有 if 语句的新列

Posted

技术标签:

【中文标题】Pandas 中带有 if 语句的新列【英文标题】:New column on Pandas with an if statment 【发布时间】:2021-06-05 00:25:04 【问题描述】:

我正在尝试重新创建表格的蓝色一侧,其中 excel 上 dnvgl 形状的方程式为 (=IF('LENGTH (m)'>(3*DEPTH d (m)),"Flat Long shaped","Box/round shaped").

我尝试使用这个公式在 pandas 上执行此操作。

liftinput['DNVGL Shape']= ('Flat Long Shaped' if liftinput['LENGTH (m)'] > (3*liftinput['DEPTH d (m)']) else 'Box/Round Shaped')

我收到此错误 - '系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。'

【问题讨论】:

你在找liftinput['DNVGL Shape']= liftinput.apply(lambda x: 'Flat Long Shaped' if x['LENGTH (m)'] > (3*x['DEPTH d (m)']) else 'Box/Round Shaped', axis=1) 请避免使用apply(...) ***.com/questions/54432583/… 【参考方案1】:

你要找的是这个;

import numpy as np

liftinput['DNVGL Shape'] = np.where(liftinput['LENGTH (m)'].gt(liftinput['DEPTH d (m)'].mul(3)), 'Flat Long Shaped', 'Box/Round Shaped')

这可能是您尝试做的最有效的方式。

【讨论】:

这行得通。但是我们可以在 pandas 上做到这一点而不会出现值错误吗? 您会收到值错误,因为您尝试在带有多个布尔值的括号内返回单个值。 (liftinput['LENGTH (m)'] > (3*liftinput['DEPTH d (m)'])pandas.Series 对象中返回大量Falses 和Trues。)你可以做的是类似liftinput['DNVGL Shape'] = ['Flat Long Shaped' if liftinput['LENGTH (m)'][idx] > (3*liftinput['DEPTH d (m)'][idx]) else 'Box/Round Shaped' for idx in liftinput.index]。但同样,这不是在大型数据集中使用的方法。

以上是关于Pandas 中带有 if 语句的新列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 检查最后 N 行的值,基于结果的新列

读取多个 csv 文件并将文件名添加为 pandas 中的新列

包含 Pandas 的新列中包含列表的值计数 [重复]

如何访问 pandas 数据框列中的字典元素并对其进行迭代以创建填充有各自值的新列?

将 uuid 添加到 pandas DataFrame 中的新列

Pandas df 操作:如果其他列行重复,则带有值列表的新列 [重复]