我不确定为什么在这种简单的if条件下会收到这个奇怪的错误。
我添加了功能funt
,以检查“所有者”列的每一行中的值,
首先,我要检查“所有者”列中的行是否具有以下任何值[ 'hal','jula','huli']
,如果是,则应返回'cont'
。
此返回值将用于在数据帧df
中创建新的列(团队)。
每当我尝试在代码下运行时,都会出现此错误。
def funt(row):
if df['Owner'] in ['hal','jula','huli']: # error line
return 'cont'
elif df['Owner'] == "assigned":
return "unassigned"
elif df['Owner'] == "Other":
return "Other"
else:
return "Something else"
df['team'] = df.apply(lambda row: funt(row), axis=1)
错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:1)
嗯,我假设您要对照if语句中的列表检查行项目“所有者”的值?您是否愿意写
if row['Owner'] in ['hal', 'jula', 'huli']:
看起来行对象正在传递到函数中?另一方面,df ['Owner']会尝试对照列表检查整个数据框的Owner列,因此会导致多种True / False可能性。因此,“模棱两可”。
或者,您可以像这样,而不是首先使用类似的功能:
mappings = {"assigned": "unassigned", "other": "Other"}
df.loc[:, 'Columns1'] = [mappings[value.lower()] if value.lower() in ["assigned", "other"] else "Something else" for value in df.loc[:, 'Owner']]