为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫应用自定义函数问题('if'语句不起作用)

熊猫应用自定义函数问题('if'语句不起作用)

幕布斯7119047 2021-08-17 10:21:10
我制作了应用的func如下: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 7df_train.apply(lambda y: NewMonth(y['month']), axis=1)但是,我得到的所有输出都是 10,000 行中的“1”。我找不到我的 NewMonth 函数有什么问题。
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

其他解决方案解决了您的问题,但实际上对于这种类型的计算,您应该使用.map或pd.cut


样本数据:

import numpy as np

import pandas as pd

df = pd.DataFrame({'Month': np.random.randint(1,13,10)})

.map

d = {1:1, 2:1, 3:2, 4:2, 5:3, 6:4, 7:5, 8:5, 9:6, 10:6, 11:7, 12:7}

df['Mapped'] = df.Month.map(d)


#   Month  Mapped

#0      3       2

#1      3       2

#2      7       5

#3      2       1

#4      4       2

#5     11       7

#6     12       7

#7     10       6

#8      7       5

#9      2       3

pd.cut

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


查看完整回答
反对 回复 2021-08-17
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

请将您的if条件更改为:

if x == 1 or x == 2:


查看完整回答
反对 回复 2021-08-17
?
杨魅力

TA贡献1811条经验 获得超6个赞

在每个 if 语句中,您目前只将 x 与一个数字进行比较。例如,在第一个中,您说“如果 x 为 1,或者如果 2 为真”。一个数字每次都会返回 True,因此即使 x 可能不是 1,您仍然每次都会返回 1,因为 2 将始终为真。


看来你要做的是——


if x == 1 or x == 2

    return 1

等等。


查看完整回答
反对 回复 2021-08-17
  • 3 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号