我写了以下代码:
df.loc[((df['col_A'] == False) & (df['loc_B'] == False)), 'col_C'] = "abc"
但是“ abc”被写在col_C的所有值上,而不是条件中指定的值。为什么会这样?
编辑:
我的列是对象/字符串,因此我尝试使用以下函数对其进行转换:
def str_to_bool(s):
if s == 'True':
return True
elif s == 'False':
return False
但是会引发以下错误:
"The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()".
答案 0 :(得分:0)
首先将您的系列转换为布尔值,例如通过pd.DataFrame.apply
:
cols = ['col_A', 'col_B']
df[cols] = df[cols].apply(lambda x: x.eq('True'))
然后应用您的逻辑,注意~
可用于取反序列:
df.loc[~df['col_A'] & ~df['col_B'], 'col_C'] = "abc"
或者根据摩根大通的法则:
df.loc[~(df['col_A'] | df['col_B']), 'col_C'] = "abc"