[英]Python User Defined Function using IF statements not working
我有以下数据框
Index education marital-status occupation gender target
0 bachelors never-married adm-clerical male 0
1 bachelors spouse exec-managerial male 0
2 hs-grad divorced handlers-cleaners male 0
3 11th spouse handlers-cleaners male 0
4 bachelors spouse prof-specialty female 0
5 masters spouse exec-managerial female 0
6 other other other-service female 0
7 hs-grad spouse exec-managerial male 1
8 masters never-married prof-specialty female 1
9 bachelors spouse exec-managerial male 1
有人可以向我解释以下原因为何不起作用-我认为应该根据我已阅读的内容和所看到的内容进行应用。
def new_features(education, gender, target):
if [((education == 'bachelors') & (gender == 'male') & (target == 1))]:
result = 'educated_male_convert'
elif [((education == 'bachelors') & (gender == 'female') & (target == 1))]:
result = 'educated_female_convert'
else:
result = 'educated_not_determined'
return result
df['new_col'] = df.apply(lambda row: new_features(row['education'], row['gender'], row['target']), axis=1)
它只是返回: educated_male_convert
我遵循了许多教程,并阅读了其他主题,并将相同的代码应用于自己的数据集-不知道我缺少什么。
任何帮助,将不胜感激
问题是您将if
条件放在方括号中。 因此,代码不是在测试表达式if False: ...
,而是在测试if [False]: ...
并且由于任何非空列表的评估结果为True
,因此[False]
评估结果为True
,并且代码转到错误的分支。
这也是这样做的另一种方式:
df['new_col'] = df.apply(lambda row: 'educated_male_convert' if row['education'] == 'bachelors' and row['gender'] == 'male' and row['target'] == 1
else ('educated_female_convert' if row['education'] == 'bachelors' and row['gender'] == 'female' and row['target'] == 1
else ('educated_not_determined')), axis=1)
df
这是一个np.select
解决方案:
c1=df.education=='bachelors'
c2=df.gender=='male'
c3=df.target.astype(bool)
df['new_col']=np.select([c1&c2&c3,c1&~c2&c3],['educated_male_convert',
'educated_female_convert'],'educated_not_determined')
print(df)
education marital-status occupation gender target \
Index
0 bachelors never-married adm-clerical male 0
1 bachelors spouse exec-managerial male 0
2 hs-grad divorced handlers-cleaners male 0
3 11th spouse handlers-cleaners male 0
4 bachelors spouse prof-specialty female 0
5 masters spouse exec-managerial female 0
6 other other other-service female 0
7 hs-grad spouse exec-managerial male 1
8 masters never-married prof-specialty female 1
9 bachelors spouse exec-managerial male 1
new_col
Index
0 educated_not_determined
1 educated_not_determined
2 educated_not_determined
3 educated_not_determined
4 educated_not_determined
5 educated_not_determined
6 educated_not_determined
7 educated_not_determined
8 educated_not_determined
9 educated_male_convert
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.