我编写了带有很多ELIF和OR语句的函数。代码正在工作,但是结果却不是我想要得到的-与我合作的DF表中的绝对值相同。我在做什么错了?
def some_func(x):
if x == "aaaa" or "bbb" or "ccc" or "zzz":
return 1
elif x == "ddd" or "eee" or "fff" or "ggg":
return 2
elif x == "hhh" or "ppp" or "nnn" or "mmm":
return 3
else:
return 0
df.TABLE_name = df.TABLE_name.apply(some_func).astype('int64')
df ['TABLE_name']。value_counts()
出局:1 38133
答案 0 :(得分:0)
尽管您的直觉是正确的,但是代码的当前设置方式并未执行您想要的方式。
写作:
if x == "hello" or "world"
不会不检查x
是否等于hello
或等于world
。它检查x
是否等于hello
,并且 自动 返回true,因为它实际上是在评估if("hello")
,这将总是返回true
由于语法错误,您的代码无法正常工作。考虑进行以下更改:
def some_func(x):
if x == "aaaa" or x == "bbb" or x == "ccc" or x == "zzz":
return 1
elif x == "ddd" or x == "eee" or x == "fff" or x == "ggg":
return 2
elif x == "hhh" or x == "ppp" or x == "nnn" or x == "mmm":
return 3
else:
return 0
答案 1 :(得分:0)
与其在每个O(n)
/ if
语句中进行多个elif
比较,不如考虑使用一组用于单个O(1)
比较:
def some_func(x):
if x in {"aaaa", "bbb", "ccc", "zzz"}:
return 1
elif x in {"ddd", "eee", "fff", "ggg"}:
return 2
elif x in {"hhh", "ppp", "nnn", "mmm"}:
return 3
else:
return 0