我有一个如下所示的熊猫数据框:
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
我该如何解决?
答案 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