如何使用条件设置新数据框(if-else)

时间:2020-04-21 18:04:17

标签: python pandas

Dataset

Error that I'm getting

下面是我的数据框的字段:序列号,深度,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

1 个答案:

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

同时合并两个数据帧(df1df2)以获得完整结果:

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