在pandas中合并两个布尔列

3

我有一个带有几个标志列的表格。(3个机构对银行进行评级;所有情况互相排斥=>一次只有一个标志是ON。如果flag1有值,则flag2和flag3将不会有任何值,依此类推)

  BankName     Flag1       Flag2    Flag3  
    B1         TRUE         
    B2                                FALSE
    B3                      TRUE
    B4          FALSE  
    B5                       TRUE 

and so on.

What I want:

  BankName     Flag1       Flag2    Flag3   Anyflag  
    B1         TRUE                           TRUE 
    B2                               FALSE    FALSE
    B3                      TRUE              TRUE
    B4          FALSE                         FALSE   
    B5                       TRUE             TRUE

基本上,我希望将标志整合到一个单独的列中。我已经尝试过合并和连接,但它们似乎不能用于布尔列。
尝试过的方法:
[IN]:
df['Any flag']=pd.concat(df['Flag1'], df['Flag2'], df['Flag3'])
[OUT]
TypeError: first argument must be an iterable of pandas objects, you 
passed an object of type "Series"
[IN]:
df['Any flag']=pd.concat(df['Flag1'], df['Flag2'], df['Flag3'], axis=0)
[OUT]
TypeError: concat() got multiple values for argument 'axis'

Please help.


嗨,你尝试过什么? - Darshan
你可以使用 any() 函数来判断一个布尔值列表中是否至少包含一个 True。any([True, False, False]) 返回 True。它也可以用于处理 None 值:any([None, None, False]) 返回 False。 - Frederik Højlund
嗨,flag1、flag2、flag3等基本上是从另一个数据集中切片得到的。当其中一个flag为1时,其他两个flag的值为空白。 - noob
1个回答

9

使用any(axis='columns')

示例:

data = [ ['B1', True, '', ''],
 ['B2', '', '', False],
 ['B3', '', True, ''],
 ['B4', False, '', ''],
 ['B5','', True, '']]

df = pd.DataFrame(data, columns=['BankName', 'Flag1', 'Flag2', 'Flag3'])
df["Anyflag"] = df[['Flag1', 'Flag2', 'Flag3']].any(axis='columns')
print(df)

输出:

  BankName  Flag1 Flag2  Flag3  Anyflag
0       B1   True                  True
1       B2               False    False
2       B3         True            True
3       B4  False                 False
4       B5         True            True

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