Python 熊猫应用自定义函数问题(';if';语句不起作用)
我申请的职能如下:Python 熊猫应用自定义函数问题(';if';语句不起作用),python,pandas,if-statement,lambda,apply,Python,Pandas,If Statement,Lambda,Apply,我申请的职能如下: def NewMonth(x): if x == 1 or 2: return 1 elif x == 3 or 4: return 2 elif x == 5: return 3 elif x == 6: return 4 elif x == 7 or 8: return 5 elif x == 9 or 10: return 6
def NewMonth(x):
if x == 1 or 2:
return 1
elif x == 3 or 4:
return 2
elif x == 5:
return 3
elif x == 6:
return 4
elif x == 7 or 8:
return 5
elif x == 9 or 10:
return 6
elif x == 11 or 12:
return 7
df_train.apply(lambda y: NewMonth(y['month']), axis=1)
然而,我得到的所有输出都是10000行中的“1”。
我找不到我的NewMonth函数有什么问题。在每个if语句中,您当前只将x与一个数字进行比较。例如,在第一个例子中,你说“如果x是1,或者如果2是真的”。一个数字每次都会返回True,因此即使x可能不是1,您仍然会每次返回1,因为2始终为True 看来你要做的是-
if x == 1 or x == 2
return 1
依此类推。在每个if语句中,您当前仅将x与一个数字进行比较。例如,在第一个例子中,你说“如果x是1,或者如果2是真的”。一个数字每次都会返回True,因此即使x可能不是1,您仍然会每次返回1,因为2始终为True 看来你要做的是-
if x == 1 or x == 2
return 1
等等。请将您的
条件更改为:
if x == 1 or x == 2:
请将您的如果条件更改为:
if x == 1 or x == 2:
其他解决方案解决了您的问题,但实际上对于这种类型的计算,您应该使用.map
或pd.cut
样本数据:
.map
pd.cut
其他解决方案解决了您的问题,但实际上对于这种类型的计算,您应该使用.map
或pd.cut
样本数据:
.map
pd.cut
如果[1,2]中的x:trick@KindStranger好主意,谢谢~如果[1,2]中的x:
也会这样做trick@KindStranger好主意,谢谢~哦。。。我知道了,谢谢:)哦。。。我明白了,谢谢:)我明白了。。我的错误谢谢~!我懂了。。我的错误谢谢~!太神了这就是我要找的!!你帮我节省了我的时间,因为我必须做很多类似的工作,比如根据我的列表重新分类月、日和日期等(我想应该是“垃圾箱”,它是按列表制作的)。再次感谢!太神了这就是我要找的!!你帮我节省了我的时间,因为我必须做很多类似的工作,比如根据我的列表重新分类月、日和日期等(我想应该是“垃圾箱”,它是按列表制作的)。再次感谢!
bins = [0,2,4,5,6,8,10,12] # Right edges
labels= [1,2,3,4,5,6,7]
df['Cut'] = pd.cut(df.Month, bins=bins, labels=labels)
# If want integer labels
# df['Cut'] = pd.cut(df.Month, bins=bins, labels=False)+1
# Month Mapped Cut
#0 3 2 2
#1 3 2 2
#2 7 5 5
#3 2 1 1
#4 4 2 2
#5 11 7 7
#6 12 7 7
#7 10 6 6
#8 7 5 5
#9 2 1 1