在df.loc按位条件不给期待导致

问题描述 投票:1回答:1

我写了下面的代码:

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()".
python pandas bit-manipulation loc
1个回答
0
投票

首先你的系列转换为Boolean,例如通过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"
© www.soinside.com 2019 - 2024. All rights reserved.