我正在使用具有以下结构的DataFrame体验/学习Python:
df = pd.DataFrame({"left_color" : ["red", "green", "blue", "black", "white", ""],
"right_color" : ["red", "gray", "", "black", "red", ""],
"flag" : [1, 2, 3, 1, 2, 3]})
print(df)
left_color right_color flag
0 red red 1
1 green gray 2
2 blue 3
3 black black 1
4 white red 2
5 3
我的目标是flag
根据left_color
和right_color
列的值有条件地更改Series的值。特别:
left_color
缺少或 right_color
缺少,请将flag
值更改为numpy NaN
;left_color
不同于right_color
,则将flag
值更改为0
。这是我的尝试:
def myfunc(left_side, right_side, value):
if (left_side == "") | (right_side == ""):
value = np.nan
if left_side != right_side:
value = 0
df["flag"] = df.apply(lambda x: myfunc(x["left_color"], x["right_color"], x["flag"]), axis = 1)
print(df)
left_color right_color flag
0 red red None
1 green gray None
2 blue None
3 black black None
4 white red None
5 None
如您所见,我得到的结果不是我最初描述的结果。相反,我None
到处都在获取价值。这是我想要的结果:
left_color right_color flag
0 red red 1
1 green gray 0
2 blue NaN
3 black black 1
4 white red 0
5 NaN
我想了解我的错误以及解决方法。另外,我想看看是否有更Python化的方法可以解决此问题,并且在计算上更有效。
您忘记了在函数中返回值。
def myfunc(left_side, right_side, value):
if (left_side == "") | (right_side == ""):
return np.nan
elif left_side != right_side:
return 0
else:
return value
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句