Python 如何用一系列字符串替换一系列布尔值?

Python 如何用一系列字符串替换一系列布尔值?,python,pandas,Python,Pandas,解决方案是使用replace()两次: import pandas as pd s = pd.Series([True, False, False]) s = s.replace(False, "A") s = s.replace(True, 'B') 那么 有没有更优雅的方法来实现这一点?使用map mapper={True:'B',False:'A'} s = s.map(mapper) s Out[598]: 0 B 1 A 2 A dtype: object 使

解决方案是使用replace()两次:

import pandas as pd
s = pd.Series([True, False, False])

s = s.replace(False, "A")
s = s.replace(True, 'B')
那么


有没有更优雅的方法来实现这一点?

使用
map

mapper={True:'B',False:'A'}
s = s.map(mapper)
s
Out[598]: 
0    B
1    A
2    A
dtype: object

使用
map

mapper={True:'B',False:'A'}
s = s.map(mapper)
s
Out[598]: 
0    B
1    A
2    A
dtype: object
我会用:

我会用:

使用:

如果您正在输入布尔序列,则这比
映射
应用
要快得多:

s = pd.Series(np.random.choice([True, False], 1000000))

%%timeit
np.where(s, 'A','B')
每个回路4.43 ms±94.3µs(7次运行的平均值±标准偏差,每个100个回路)

每个回路44.1 ms±178µs(7次运行的平均值±标准偏差,每个10个回路)

每个回路126 ms±4.51 ms(7次运行的平均值±标准偏差,每个10个回路)

使用:

如果您正在输入布尔序列,则这比
映射
应用
要快得多:

s = pd.Series(np.random.choice([True, False], 1000000))

%%timeit
np.where(s, 'A','B')
每个回路4.43 ms±94.3µs(7次运行的平均值±标准偏差,每个100个回路)

每个回路44.1 ms±178µs(7次运行的平均值±标准偏差,每个10个回路)


每个循环126 ms±4.51 ms(7次运行的平均值±标准偏差,每个循环10次)

您可以使用.map()函数使用以下命令:

s = pd.Series([True, False, False])
s = s.map({True: 'A', False: 'B'})
print(s) 
s = pd.Series([True, False, False])
s = s.map(lambda x: "A" if x else "B")        
print(s)
或者也可以尝试使用.map()函数下的lambda函数的另一种方法:

s = pd.Series([True, False, False])
s = s.map({True: 'A', False: 'B'})
print(s) 
s = pd.Series([True, False, False])
s = s.map(lambda x: "A" if x else "B")        
print(s)

可以使用.map()函数使用以下命令:

s = pd.Series([True, False, False])
s = s.map({True: 'A', False: 'B'})
print(s) 
s = pd.Series([True, False, False])
s = s.map(lambda x: "A" if x else "B")        
print(s)
或者也可以尝试使用.map()函数下的lambda函数的另一种方法:

s = pd.Series([True, False, False])
s = s.map({True: 'A', False: 'B'})
print(s) 
s = pd.Series([True, False, False])
s = s.map(lambda x: "A" if x else "B")        
print(s)

一次通过:
s.apply(lambda v:{False:“A”,True:“B”}[v])
这里有
replace
效率低下的原因。一次通过:
s.apply(lambda v:{False:“A”,True:“B”}[v])
这里有
replace
效率低下的原因。我打算提出这个建议。我不能测试atm,但我怀疑它比
map
?@roganjosh快,对性能没有把握。可能不是瓶颈,但值得测试:)我打算提出这个建议。我不能测试atm,但我怀疑它比
map
?@roganjosh快,对性能没有把握。可能不是瓶颈,但值得测试:)