【问题标题】:Combine 2 Boolean columns in pandas在 pandas 中组合 2 个布尔列
【发布时间】:2019-10-01 12:33:07
【问题描述】:

我有一个,其中很少有标志列。(3 个机构对银行进行评级;所有情况互斥 => 一次只有一个标志处于打开状态。如果标志 1 有值,标志 2 和标志 3 不会有任何价值等等)

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

等等。

我想要什么:

  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'

请帮忙。

【问题讨论】:

  • 嗨,你试过了
  • 您可以使用 any() 来确定一个布尔值列表是否至少包含一个 true。 any([True, False, False]) 返回 True。也可以与 none 值一起使用:any([None, None, False]) 返回 False。
  • 嗨,flag1、flag2、flag3 等基本上是来自另一个数据集的切片。当 1 个标志打开时,其他两个标志的值为空

标签: python pandas merge concat


【解决方案1】:

使用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

【讨论】:

    猜你喜欢
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多