Python Dataframe:使用If-Then-Else逻辑有条件地创建新列-->&引用;级数的真值是模糊的;

Python Dataframe:使用If-Then-Else逻辑有条件地创建新列-->&引用;级数的真值是模糊的;,python,pandas,if-statement,conditional,ambiguous,Python,Pandas,If Statement,Conditional,Ambiguous,我正在使用下面的代码创建一个新列,该列的值是基于Python数据框架的另外两列中的值派生的 # Create a list to store the data MSP = [] for row in df_EVENT5_18['FLT']: if df_EVENT5_18['FLT'].str.contains('1234') & df_EVENT5_18['AR'].str.contains('ABC1'): MSP.append(29) elif (

我正在使用下面的代码创建一个新列,该列的值是基于Python数据框架的另外两列中的值派生的

# Create a list to store the data
MSP = []

for row in df_EVENT5_18['FLT']:
    if df_EVENT5_18['FLT'].str.contains('1234') & df_EVENT5_18['AR'].str.contains('ABC1'):
        MSP.append(29)
    elif (df_EVENT5_18['FLT'].str.contains('1234')) & (df_EVENT5_18['AR'].str.contains('ABC2')):
        MSP.append(25)
    else:
        MSP.append('')

# Create a new column from the list 
df_EVENT5_18['MSP'] = MSP
当我运行上述代码时,我得到以下错误:

ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()


每当您认为需要在pandas中进行循环时,请再次检查您的代码。一个线索是您在df_EVENT5_18['FLT']中有
行:
,但您从未使用

查找与字符串匹配的标记 在这种情况下,我们可以简单地使用布尔求值来获得我们想要设置的索引:

has_flt_1234 = df_EVENT5_18['FLT'].str.contains('1234')
want_29 = has_flt_1234 & df_EVENT5_18['AR'].str.contains('ABC1')
want_25 = has_flt_1234 & df_EVENT5_18['AR'].str.contains('ABC2')
使用布尔级数设置值 然后根据需要设置适当的行:

df_EVENT5_18['MSP'][want_25] = '25'
df_EVENT5_18['MSP'][want_29] = '29'
测试代码: 结果:
试试这样:

df[['new_col']] = df[['a','b'].apply(lambda (a,b) : pd.Series(your condition here),axis=1)

谢谢你的详细回复。你在这里应用逻辑的方式很有趣。。。如果艾利夫还有别的方法,有没有办法做到这一点?当然有。但不要那样做。这会快得多。
     AR   FLT
0  ABC1  1234
1  ABC2  1234
2  ABC1  1235

     AR   FLT MSP
0  ABC1  1234  29
1  ABC2  1234  25
2  ABC1  1235    
df[['new_col']] = df[['a','b'].apply(lambda (a,b) : pd.Series(your condition here),axis=1)