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