在 pandas 中组合 2 个布尔列
Combine 2 Boolean columns in pandas
我有一个 table,只有很少的标志列。(3 个机构对银行进行了评级;所有案例相互排斥 => 一次只有一个标志打开。如果flag1 有一个值,flag2 和 flag3 没有任何值等等)
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
基本上我希望将所有标志组合在一个单独的列中。我试过 merge、concat,它们似乎不适用于布尔列。
尝试过:
[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(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
我有一个 table,只有很少的标志列。(3 个机构对银行进行了评级;所有案例相互排斥 => 一次只有一个标志打开。如果flag1 有一个值,flag2 和 flag3 没有任何值等等)
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
基本上我希望将所有标志组合在一个单独的列中。我试过 merge、concat,它们似乎不适用于布尔列。
尝试过:
[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(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