根据现有列分配真/假条件

3

我需要在验证条件时分配True/False值。具体来说,我有一个数据框

col1      col2    col3   col4   col5    col6   col7    col8   col9
Number1   True   False   True   False   True   False   True   False
Number2   False  False   False  False   False  False   False  False
Number3   True   False   False  False   False  False   False  False
Number4   False  False   False  False   False  True    False  False

我需要根据True/False的值创建一个新列。如果至少有一个值为True,则在新列中分配True;否则,如果所有值都为False,则分配False。
从上面的例子中,我应该得到:
col1      col2    col3   col4   col5    col6   col7    col8   col9     col10
Number1   True   False   True   False   True   False   True   False    True
Number2   False  False   False  False   False  False   False  False    False
Number3   True   False   False  False   False  False   False  False    True
Number4   False  False   False  False   False  True    False  False    True

我已经尝试过

if (df['COL1'], df['COL2'], df['COL3'], df['COL4'], df['COL5'], df['COL6'], df['COL7'], df['COL8'], df['COL9']).any():
                df[index,'COL10'] = True
            else:
                df[index,'COL10'] = False

但是这会赋予所有True值。
你能帮我获得正确的输出吗?非常感谢。
2个回答

4

只需要执行任何操作

df.loc[:,'col2':].any(1)
0     True
1    False
2     True
3     True
dtype: bool

#df['col10']=df.loc[:,'col2':].any(1)

1
你可能需要澄清一下,缩写 df.loc[:, "col2":] 等同于 df.loc[:, ["col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10"]]。实际上,你不应该使用这个缩写,因为 OP 在条件中没有包含 col10 - jkr
1
@jakub 原始数据框中没有col10~。 - BENY
2
你是对的 - 我错了。但是你的答案会更好,如果解释一下缩写,以防万一OP或未来的读者不理解它。 - jkr

0

你在这里犯了两个错误。一个是错过了对行进行迭代,另一个是将col1包含在表达式中。 以下是我尝试类似于你的方式所做的。

df['col10'] = False
for index, row in df.iterrows():
    if row['col2'] or row['col3'] or row['col4'] or row['col5'] or row['col6'] or row['col7'] or row['col8'] or row['col9']:
        df.iloc[index,9] = True
    else:
        df.iloc[index,9] = False

一行代码解决此问题的方法如下:
df['col10'] = df.loc[:,'col2':].any(1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接