熊猫数据框根据其他列是否有数据添加新列

时间:2019-08-14 12:21:56

标签: r python-3.x pandas dataframe

我有一个如下所示的熊猫数据框:

x y z
1 2 3
na 1 4
na na 5

现在,我想添加另一列,其值取决于x,y和z。如果x可用,则a为“是”。如果是na,则它将检查y。如果y可用,则a为“否”,否则a与z相同(如果可用,否则为0)。我在R中具有以下功能:

cur_sta <- function(data){

    sta <- ifelse(!is.na(data$x),"yes",    
        ifelse(!is.na(data$y),"no",    
        ifelse(!is.na(data$z),data$z,0)))

}

如何在python中实现相同的目的?

编辑:

我尝试了以下操作:

conditions = [
        (not pd.isnull(data["x"].item())),
        (not pd.isnull(data["y"].item())),
        (not pd.isnull(data["z"].item()))]
    choices = ['yes', 'no', data["z"]]
    data['col_sta'] = np.select(conditions, choices, default='0')

但是出现以下错误:

ValueError: can only convert an array of size 1 to a Python scalar

我该如何解决?

1 个答案:

答案 0 :(得分:1)

使用Series.notna测试非缺失值:

conditions = [data["x"].notna(),
              data["y"].notna(),
              data["z"].notna()]
choices = ['yes', 'no', data["z"]]
data['col_sta'] = np.select(conditions, choices, default='0')
print (data)
     x    y  z col_sta
0  1.0  2.0  3     yes
1  NaN  1.0  4      no
2  NaN  NaN  5       5