下面是我的数据框的字段:序列号,深度,x,y,z
如果深度字段大于55,我正在尝试查找体积(xyz),否则将默认值设置为6。
但是我收到错误消息“该系列的真值不明确”。有人可以指导我我的错误在哪里吗?
def my_if(diamond):
if diamond.depth > 55:
diamond['New']= diamond.x*diamond.y*diamond.z
else:
diamond['New'] = 6
答案 0 :(得分:1)
类似的事情会起作用。我创建了一个示例df diamond
,其中包含3行,就像您的数据框一样:
In [2041]: diamond['volume'] = np.where(diamond.depth > 55, diamond.x * diamond.y * diamond.z, 6)
In [2042]: diamond
Out[2042]:
depth x y z volume
0 61.5 3.95 3.98 2.43 38.202030
1 52.8 3.89 3.84 2.31 6.000000
2 55.2 4.05 4.07 2.31 38.076885
步骤1:将数据框分为两部分。首先,使用depth > 55
:
In [2004]: df1 = diamond[diamond.depth > 55]
第2步:对于上面获得的df1,将x,y和z相乘得到音量:
In [2016]: df1['volume'] = df1.x * df1.y * df1.z
步骤3:使用df2
创建另一个数据框(depth <= 55
):
In [2020]: df2 = diamond[diamond.depth <= 55]
第4步:硬编码为6:
In [2021]: df2['volume'] = 6
同时合并两个数据帧(df1
和df2
)以获得完整结果:
In [2024]: pd.concat([df1,df2])
Out[2024]:
depth x y z volume
0 61.5 3.95 3.98 2.43 38.202030
1 59.8 3.89 3.84 2.31 34.505856
2 54.2 4.05 4.07 2.31 6.000000